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

Разверните код встраиваемой системы из моделей 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.

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

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

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

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

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

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

  • 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

Больше о