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

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

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

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

  • Шаги расчета для блоков Inport In1_1s и In2_2s устанавливаются равные 1 и 2 секунды, соответственно.

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

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

  • Введите значение Fixed-step.

  • Для решателя задано значение discrete (no continuous states).

  • Обработайте каждую дискретную скорость как отдельную задачу, удаленную.

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

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

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

Сгенерированный код планирует субрейты в модели. В этом примере скорость для блока 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 определяет типы данных, структуры и макросы, которые требуются сгенерированному коду.

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

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

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

  2. Запишите входные данные в сгенерированный код для блоков Inport модели.

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

  4. Считайте данные из сгенерированного кода для блоков 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

Подробнее о

Для просмотра документации необходимо авторизоваться на сайте