Используйте многозадачное планирование на основе 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 определяет типы данных, структуры и макросы, необходимые для созданного кода.
Откройте и просмотрите отчет по кодовому интерфейсу. Используйте информацию в этом отчете для написания кода интерфейса для среды выполнения:
Включить созданный файл заголовка путем добавления директивы #include rtwdemo_multirate_multitasking.h.
Запись входных данных в созданный код для блоков ввода модели.
Вызовите сгенерированные функции точки входа.
Считывание данных из созданного кода для блоков 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