Моделируйте явное вызов функции с подсистемами вызова функций

Разверните встраиваемый системный код из моделей Simulink ® путем разбиения модели на подсистемы вызова функций, которые вы создаете отдельно .

Подсистема вызова функций

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

Эта модель разделяет алгоритм на три подсистемы вызова функций: Rate1s, Rate2s, и DataBuffer. Используйте подсистемы вызова функций, чтобы явно смоделировать многоуровневые системы.

Подсистемы Rate1s и DataBuffer используйте шаг расчета 1 секунду. Подсистема Rate2s использует шаг расчета 2 секунды.

Этот проект модели упоминается как моделирование экспортов функций. Simulink ограничивает модель подсистемами вызова функций на корневом уровне. Ведущий блок Inport задает имя функции.

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

  • Введите set Fixed-step.

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

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

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

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

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

Ваша среда выполнения должна планировать сгенерированный код функции и передавать данные между функциями.

Ваша среда выполнения должна планировать сгенерированный код функции и обрабатывать передачи данных между функциями. Сгенерированный код прост, и вы управляете порядком выполнения.

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

Откройте приложение Embedded Coder, затем сгенерируйте код и отчет генерации кода.

Просмотр сгенерированного кода

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

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

  • rtwdemo_explicitinvocation_funccallsubsys.c вызывает функцию инициализации и экспортированные функции для подсистем Rate1s, Rate2s, и DataBuffer.

  • rtwdemo_explicitinvocation_funccallsubsys.h объявляет данные модели структуры и открытый интерфейс экспортированным функциям точки входа и структурам данных.

  • rtwtypes.h определяет типы данных, структуры и макросы, которые требуются сгенерированному коду.

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

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

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

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

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

  4. Считайте данные из сгенерированного кода для блоков Outport модели.

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

  • rtU.In1_1s типа real_T с размерностью 1

  • rtU.In2_2s типа real_T с размерностью 1

Функции точки входа:

  • Инициализируйте функцию точки входа, void rtwdemo_explicitinvocation_funccallsubsys_initialize(void). При запуске вызовите эту функцию один раз.

  • Экспортированная функция, void CallEvery1s(void). При необходимости вызовите эту функцию.

  • Экспортированная функция, void CallEvery1s(void). При необходимости вызовите эту функцию.

  • Экспортированная функция, void CallEvery2sAt1sPriority(void). При необходимости вызовите эту функцию.

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

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

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

Подробнее о