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

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

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

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

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

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

  • Блок Rate Transition моделирует явный переход уровня. Также сообщите, что Simulink, чтобы вставить блоки Перехода Уровня для вас путем выбора образцового Решателя параметра конфигурации> Автоматически обрабатывает переход уровня для передачи данных.

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

  • Решатель> набор Типа к Fixed-step.

  • Решатель> набор Решателя к discrete (no continuous states).

  • Решатель> Обработка каждый дискретный уровень как отдельная задача выбран.

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

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

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

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

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

  • Simulink не налагает архитектурные ограничения на модель. Создайте модель, не налагая ограничения программной архитектуры в модели.

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

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

Simulink осуществляет ограничения передачи данных, чтобы достигнуть пропорционального числу обращений планирования:

  • Передачи данных происходят между одной задачей чтения и одной задачей записи.

  • Когда передачи данных между двумя задачами, только одна задача может вытеснить другую задачу.

  • Для периодических задач задача с более быстрым уровнем имеет более высокий приоритет, чем задача с более медленным уровнем. Кроме того, задача с более быстрым уровнем, вытесняет задачу с более медленным уровнем.

  • Задачи работают на одном процессоре.

  • Квантование времени, использование заданного периода времени, во время которого задача может запуститься в системе вытесняющей многозадачности, не позволено.

  • Процессы не разрушают или перезапускают, особенно во время передач данных между задачами.

  • Операции чтения и операции записи на переменных размера байта являются атомарными.

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

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

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

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

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

  • ert_main.c является примером основная программа (среда выполнения) для модели. Этот код управляет выполнением типового кодекса путем вызывания функций точки входа rtwdemo_multirate_multitasking_step0 и rtwdemo_multirate_multitasking_step1. Используйте этот файл в качестве отправной точки для кодирования вашей среды выполнения.

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

  • rtwdemo_multirate_multitasking.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_multitasking_initialize(void). При запуске вызовите эту функцию однажды.

  • Выведите и обновите точку входа (шаг) функция, void rtwdemo_multirate_multitasking_step0(void). Вызывайте эту функцию периодически на самом быстром уровне в модели. Для этой модели вызывайте функцию каждую секунду. Чтобы достигнуть выполнения в реальном времени, присоедините эту функцию к таймеру.

  • Выведите и обновите функцию точки входа, void rtwdemo_multirate_multitasking_step1(void). Вызывайте эту функцию периодически на втором самом быстром уровне в модели. Для этой модели вызывайте функцию каждые две секунды. Чтобы достигнуть выполнения в реальном времени, присоедините эту функцию к таймеру.

Выходные порты:

  • rtY.Out1 типа данных real_T с размерностью 1

  • rtY.Out2 типа данных real_T с размерностью 1

Больше о