Этот пример показывает, что модель, спроектированная и сконфигурированная для генерации кода встраиваемой системы, намеревалась выполниться на одножильной, однозадачной платформе. Алгоритм приложения получен в одной иерархии модели, позволив использовать 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. Сгенерируйте код для тех блоков с остальной частью алгоритма.
Откройте приложение Embedded Coder. Затем сгенерируйте код и отчет генерации кода. Модель в качестве примера генерирует отчет.
Из отчета генерации кода рассмотрите сгенерированный код.
ert_main.c
пример основная программа (среда выполнения) для модели. Этот код управляет выполнением типового кодекса путем вызывания функции точки входа rtwdemo_multirate_singletasking_step
. Используйте этот файл в качестве начальной точки для кодирования вашей среды выполнения.
rtwdemo_multirate_singletasking.c
содержит точки входа для кода, который реализует алгоритм модели. Этот файл включает код планирования уровня.
rtwdemo_multirate_singletasking.h
объявляет структуры данных модели и открытый интерфейс к точкам входа модели и структурам данных.
rtwtypes.h
задает типы данных, структуры и макросы, которых требует сгенерированный код.
Откройте и рассмотрите Отчет Интерфейса Кода. Используйте информацию в том отчете записать интерфейсный код для вашей среды выполнения:
Включайте сгенерированный заголовочный файл путем добавления направляющего #include rtwdemo_multirate_singletasking.h
.
Запишите входные данные в сгенерированный код для блоков модели Inport.
Вызовите сгенерированные функции точки входа.
Считайте данные из сгенерированного кода для блоков модели Outport.
Input port:
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