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

Эта модель разделяет алгоритм на две атомарные подсистемы: Rate1s и Rate2s. Подсистема Rate1s конфигурируется со временем выборки 1 секунда. Подсистема Rate2s конфигурируется со временем выборки 2 секунды.
Тип имеет значение Fixed-step.
Решатель имеет значение discrete (no continuous states).
Обработка каждой дискретной скорости как отдельной очищенной задачи.
Simulink ® моделирует модель на основе конфигурации модели. Simulink распространяет и использует время выборки блоков Inport, чтобы упорядочить выполнение блоков на основе одноядерной однозадачной платформы выполнения.
В этом примере условное обозначение времени выборки показывает неявную группировку скорости. Красный - самая быстрая дискретная скорость. Зеленый цвет представляет вторую самую быструю дискретную скорость.
На основе монотонного планирования, код приложения (среда выполнения) должен передавать данные между подсистемами. Rate2s и Rate1s с частотой 2 секунды с приоритетом 1 секунда. То есть сгенерированная функция передает данные в задаче за 1 секунду каждый раз до выполнения кода для подсистемы. Rate1s.
Среда выполнения должна запланировать сгенерированный код функции и обработать перенос данных между ними. Это является преимуществом для многоскоростных моделей, поскольку сгенерированный код не предполагает планирования или семантики передачи данных. Однако платформа выполнения должна явно обрабатывать передачу данных.
Создайте одну вызываемую функцию для каждой подсистемы без соединений между ними. Существует несколько способов создания кода для подсистемы, в том числе из контекстного меню подсистемы.
Откройте приложение Embedded Coder.
Щелкните правой кнопкой мыши блок подсистемы.
Щелкните Код C/C + + > Построить эту подсистему.
В диалоговом окне «Build code for Subsystem» нажмите кнопку «Build».
Пример модели создает отчет.
Просмотрите созданный код в ракурсе «Код» или в отчете о создании кода.
ert_main.c является примером основной программы (фреймворк выполнения) для подсистемы. Этот код управляет выполнением кода модели путем вызова функции точки входа Rate1s_step или Rate2s_step. Используйте этот файл в качестве отправной точки для кодирования среды выполнения.
Rate1s.c и Rate2s.c содержат точки входа для кода, реализующего подсистему Rate1s и Rate2sсоответственно. Этот файл содержит код планирования скорости и задач.
Rate1s.h и Rate2s.h объявить структуры данных модели и открытый интерфейс с точками входа подсистемы и структурами данных.
rtwtypes.h определяет типы данных, структуры и макросы, необходимые для созданного кода.
Откройте и просмотрите отчет по кодовому интерфейсу. Используйте информацию в этом отчете для написания кода интерфейса для среды выполнения:
Включить созданный файл заголовка путем добавления директивы #include rtwdemo_explicitinvocation_atomicsusys.h.
Запись входных данных в созданный код для блоков ввода модели.
Вызовите сгенерированные функции точки входа.
Считывание данных из созданного кода для блоков Outport модели.
Входные порты, Rate1s:
rtU.In1 типа real_T с размером 1
rtU.In2 типа real_T с размером 1
Функции начального уровня, Rate1s:
Инициализация функции точки входа, void Rate1s_initialize(void). При запуске вызовите эту функцию один раз.
Функция вывода и обновления точки входа (шаг), void Rate1s_step(void). Вызывайте эту функцию периодически, каждую секунду.
Функция завершения, void Rate1s_terminate(void). Вызовите эту функцию один раз из кода завершения работы.
Выходные порты, Rate1s:
rtY.Out1 типа real_T с размером 1
rtY.Out2 типа real_T с размером 1
Входные порты, Rate2s:
rtU.In1 типа real_T с размером 1
Функции начального уровня, Rate2s:
Инициализация функции точки входа, void Rate2s_initialize(void). Вызовите эту функцию один раз при запуске.
Вывод и обновление точки входа (шаг), void Rate2s_step(void). Вызывайте эту функцию периодически, каждые 2 секунды.
Функция завершения, void Rate2s_terminate(void). Вызовите эту функцию один раз из кода завершения работы.
Выходные порты, Rate2s:
rtY.Out1 типа real_T с размером 1