Разверните код встраиваемой системы из моделей 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
задает типы данных, структуры и макросы, которых требует сгенерированный код.
Откройте и рассмотрите Отчет Интерфейса Кода. Используйте информацию в том отчете записать интерфейсный код для вашей среды выполнения:
Включайте сгенерированные заголовочные файлы путем добавления директив #include Rate1s.h
, #include DataBuffer.h
и #include Rate2s.h
.
Запишите входные данные в сгенерированный код для блоков модели Inport.
Вызовите сгенерированные функции точки входа.
Считайте данные из сгенерированного кода для блоков модели 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