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

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

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

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

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

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

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

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

  • Введите набор к Fixed-step.

  • Набор решателя к discrete (no continuous states).

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

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

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

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

Input port:

  • 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

Больше о