Образцовое одножильное, однозадачное выполнение платформы

Этот пример показывает, что модель, разработанная и сконфигурированная для генерации кода встраиваемой системы, намеревалась выполниться на одножильной, однозадачной платформе. Алгоритм приложения получен в одной иерархии модели, позволив использовать 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, чтобы заказать выполнение блока на основе одножильной, однозадачной платформы выполнения.

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

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

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

  • Simulink не налагает архитектурные ограничения на модель.

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

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

Ваша среда выполнения может связаться с внешними устройствами для чтения и записи образцового входа. Например, образцовые внешние устройства при помощи Блоков s-function Simulink. Сгенерируйте код для тех блоков с остальной частью алгоритма.

Сгенерируйте код и отчет

Сгенерируйте код и отчет генерации кода. Модель в качестве примера генерирует отчет.

Рассмотрите сгенерированный код

Из отчета генерации кода рассмотрите сгенерированный код.

  • 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

Больше о