exponenta event banner

Модель одноядерной многозадачной платформы

Используйте многозадачное планирование на основе Simulink ® для моделирования и создания кода для алгоритма приложения, зарегистрированного в иерархии одной модели. Модель разработана и настроена для встраиваемой системы, предназначенной для работы на одноядерной многозадачной платформе. Модель моделируется, и генерируемый код выполняется на основе конфигурации модели и алгоритма монотонного планирования скорости .

Настройка периодической многоскоростной модели для многозадачного выполнения

Открыть пример модели rtwdemo_multirate_multitasking. Модель сконфигурирована для отображения времени образца с цветовым кодированием с аннотациями. Чтобы увидеть их, после открытия модели обновите схему, нажав клавиши Ctrl + D. Чтобы отобразить легенду, нажмите клавиши CTRL + J.

  • Примеры времени для блоков ввода In1_1s и In2_2s установлены на 1 и 2 секунды соответственно.

  • Для обеспечения четкого разделения скоростей, времени выборки для подсистем SS1 и SS2 имеют значение 1.

  • Блок Rate Transition моделирует явный переход скорости. Либо проинструктируйте Simulink вставить блоки Rate Transition, выбрав параметр конфигурации модели Automatically handle rate transition for data transfer.

Соответствующие настройки параметров конфигурации модели

  • Тип имеет значение Fixed-step.

  • Решатель имеет значение discrete (no continuous states).

  • Каждая дискретная скорость рассматривается как отдельная выбранная задача.

Планирование

Simulink ® моделирует модель на основе конфигурации модели. Код, генерируемый этой моделью, реализует ту же семантику выполнения. Simulink распространяет и использует время выборки блоков Inport для заказа выполнения блоков на основе одноядерной многозадачной платформы выполнения .

Для этой модели условное обозначение времени выборки показывает неявную группировку скорости. Красный - самая быстрая дискретная скорость. Зеленый цвет представляет вторую самую быструю дискретную скорость. Желтый цвет представляет смесь двух скоростей.

Сгенерированные спецификации кода подрейты в модели. В этом примере скорость для блока Inport In2_2sзеленая скорость является субскоростью. Созданный код правильно переносит данные между задачами, которые выполняются с различными скоростями.

Преимущества неявной группировки ставок:

  • Simulink не накладывает архитектурных ограничений на модель. Создание модели без наложения ограничений на архитектуру программного обеспечения в модели.

  • Инфраструктура выполнения не требует подробных данных о базовом планировании функций и переносе данных между тарифами. Таким образом, упрощаются требования к интерфейсу модели. Среда выполнения использует сгенерированный код интерфейса для записи входных данных, вызова функции шага модели и считывания выходных данных.

  • Генератор кода оптимизирует код по скоростям на основе семантики выполнения многозадачности.

Simulink применяет ограничения на передачу данных для достижения монотонного планирования скорости:

  • Передача данных происходит между одной задачей чтения и одной задачей записи.

  • При передаче данных между двумя задачами только одна задача может предотвратить выполнение другой задачи.

  • Для периодических задач задача с более высокой скоростью имеет более высокий приоритет, чем задача с более низкой скоростью. Кроме того, задача с более высокой скоростью вытесняет задачу с более низкой скоростью.

  • Задачи выполняются на одном процессоре.

  • Квант времени, использование определенного периода времени, в течение которого задача может выполняться в многозадачной системе, не допускается.

  • Процессы не отказывают и не перезапускаются, особенно во время передачи данных между задачами.

  • Операции чтения и записи для переменных байтового размера являются атомарными.

Среда выполнения взаимодействует с внешними устройствами для чтения и записи входных данных модели. Например, моделируйте внешние устройства с помощью блоков Simulink S-Function. Создайте код для этих блоков с остальной частью алгоритма.

Создание кода и отчета

Откройте приложение Embedded Coder. Затем создайте код и отчет о создании кода. Пример модели создает отчет.

Просмотреть созданный код

Просмотрите созданный код из отчета о создании кода.

  • ert_main.c является примером основной программы (инфраструктуры выполнения) для модели. Этот код управляет выполнением кода модели путем вызова функций точки входа rtwdemo_multirate_multitasking_step0 и rtwdemo_multirate_multitasking_step1. Используйте этот файл в качестве отправной точки для кодирования среды выполнения.

  • rtwdemo_multirate_multitasking.c содержит точки входа для кода, реализующего алгоритм модели. Этот файл содержит код планирования скорости.

  • rtwdemo_multirate_multitasking.h объявляет структуры данных модели и открытый интерфейс с точками входа модели и структурами данных.

  • rtwtypes.h определяет типы данных, структуры и макросы, необходимые для созданного кода.

Интерфейс кода

Откройте и просмотрите отчет по кодовому интерфейсу. Используйте информацию в этом отчете для написания кода интерфейса для среды выполнения:

  1. Включить созданный файл заголовка путем добавления директивы #include rtwdemo_multirate_multitasking.h.

  2. Запись входных данных в созданный код для блоков ввода модели.

  3. Вызовите сгенерированные функции точки входа.

  4. Считывание данных из созданного кода для блоков Outport модели.

Входные порты:

  • rtU.In1_1s типа данных real_T с размером 1

  • rtU.In2_2s типа данных real_T с размером 1

Функции точки входа:

  • Инициализация функции начальной точки, void rtwdemo_multirate_multitasking_initialize(void). При запуске вызовите эту функцию один раз.

  • Функция вывода и обновления точки входа (шаг), void rtwdemo_multirate_multitasking_step0(void). Периодически вызывайте эту функцию с самой высокой скоростью в модели. Для этой модели вызовите функцию каждую секунду. Чтобы обеспечить выполнение в реальном времени, подключите эту функцию к таймеру.

  • Вывод и обновление функции начального уровня, void rtwdemo_multirate_multitasking_step1(void). Периодически вызывайте эту функцию со второй самой быстрой скоростью в модели. Для этой модели вызовите функцию каждые две секунды. Чтобы обеспечить выполнение в реальном времени, подключите эту функцию к таймеру.

Выходные порты:

  • rtY.Out1 типа данных real_T с размером 1

  • rtY.Out2 типа данных real_T с размером 1

Подробнее