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

Примеры времени для блоков ввода In1_1s и In2_2s установлены на 1 и 2 секунды соответственно.
Для обеспечения чистого разделения скоростей, времени выборки для подсистем SS1 и SS2 имеют значение 1.
Тип имеет значение Fixed-step.
Решатель имеет значение discrete (no continuous states).
Обработка каждой дискретной скорости как отдельной очищенной задачи.
Simulink ® моделирует модель на основе конфигурации модели. Код, созданный из модели, реализует ту же семантику выполнения. Simulink распространяет и использует время выборки блоков Inport, чтобы упорядочить выполнение блоков на основе одноядерной однозадачной платформы выполнения .
Для этой модели условное обозначение времени выборки показывает неявную группировку скорости. Красный - самая быстрая дискретная скорость. Зеленый цвет представляет вторую самую быструю дискретную скорость.
Сгенерированные спецификации кода подрейты в модели. В этом примере скорость для блока Inport In2_2sзеленая скорость является субскоростью. Созданный код правильно переносит данные между задачами, выполняющимися с различными скоростями.
Преимущества неявной группировки ставок:
Simulink не накладывает архитектурных ограничений на модель.
Инфраструктура выполнения не требует подробных данных о базовом планировании функций и переносе данных между тарифами. Таким образом, упрощаются требования к интерфейсу модели. Среда выполнения использует сгенерированный код интерфейса для записи входных данных, вызова функции шага модели и считывания выходных данных.
Генератор кода оптимизирует код по скоростям на основе семантики выполнения с одной задачей.
Среда выполнения может взаимодействовать с внешними устройствами для чтения и записи входных данных модели. Например, моделируйте внешние устройства с помощью блоков Simulink S-Function. Создайте код для этих блоков с остальной частью алгоритма.
Откройте приложение Embedded Coder. Затем создайте код и отчет о создании кода. Пример модели создает отчет.
Просмотрите созданный код из отчета о создании кода.
ert_main.c является примером основной программы (инфраструктуры выполнения) для модели. Этот код управляет выполнением кода модели путем вызова функции точки входа rtwdemo_multirate_singletasking_step. Используйте этот файл в качестве отправной точки для кодирования среды выполнения.
rtwdemo_multirate_singletasking.c содержит точки входа для кода, реализующего алгоритм модели. Этот файл содержит код планирования скорости.
rtwdemo_multirate_singletasking.h объявляет структуры данных модели и открытый интерфейс с точками входа модели и структурами данных.
rtwtypes.h определяет типы данных, структуры и макросы, необходимые для созданного кода.
Откройте и просмотрите отчет по кодовому интерфейсу. Используйте информацию в этом отчете для написания кода интерфейса для среды выполнения:
Включить созданный файл заголовка путем добавления директивы #include rtwdemo_multirate_singletasking.h.
Запись входных данных в созданный код для блоков ввода модели.
Вызовите сгенерированные функции точки входа.
Считывание данных из созданного кода для блоков Outport модели.
Входные порты:
rtU.In1_1s типа данных real_T с размером 1
rtU.In2_2s типа данных real_T с размером 1
Функции точки входа:
Инициализация функции начальной точки, void rtwdemo_multirate_singletasking_initialize(void). При запуске вызовите эту функцию один раз.
Функция вывода и обновления точки входа (шаг), void rtwdemo_multirate_singletasking_step(void). Периодически вызывайте эту функцию с самой высокой скоростью в модели. Для этой модели вызовите функцию каждую секунду. Чтобы обеспечить выполнение в реальном времени, подключите эту функцию к таймеру.
Выходные порты:
rtY.Out1 типа данных real_T с размером 1
rtY.Out2 типа данных real_T с размером 1