Точка входа является местоположением в коде, где передача программного управления (выполнение) происходит. Основная функция (main()
) точка входа к программе C/C++ и называется, когда приложение начинает выполняться. Вызовы других функций, например, от main
функционируйте, обеспечьте точки входа, чтобы функционировать код. Программное управление передается вызванной функции. Функциональный код выполняется, и по окончании, возвращает управление main
или другая вызывающая функция.
При создании кода для модели генератор кода задает набор функций точки входа, которые можно вызвать, чтобы выполнить сгенерированный код. Можно вызвать сгенерированные функции из внешнего кода или от версии сгенерированной основной функции, которую вы изменяете.
Раздел Code Interface Report отчета генерации кода перечисляет функции точки входа, которые генератор кода производит для модели. Для получения дополнительной информации смотрите, Анализируют Интерфейс Сгенерированного кода (Embedded Coder).
Генератор кода производит функции точки входа для этих типов функций модели.
Тип функции модели | Исходное имя модели | Сгенерированное имя функции по умолчанию | Описание |
---|---|---|---|
Экспортируемая функция (требует Embedded Coder®), | ExportedFunction: , где имя блока Inport вызова функции в модели | или (если задано) | Для экспортированной модели функции, экспортируемой функции для подсистемы. |
Инициализируйте функцию | Initialize |
| Код инициализации для модели. В начале кода приложения вызовите функцию однажды. Не используйте эту функцию, чтобы сбросить структуру данных модели реального времени ( |
Функция раздела | Partition: , где раздел, который был создан явным образом из блока в модели и показан в Редакторе Расписания Simulink® (например, P1) | , где однозначно определяет функцию, сгенерированную в течение одного из периодов расчета модели | Для раздела модели, выхода и кода обновления. Параметр конфигурации модели Single output/update function выбран (значение по умолчанию). |
Функция обновления раздела | PartitionUpdate: , где раздел, который был создан явным образом из блока в модели и показан в Редакторе Расписания Simulink® (например, P1) | и , где однозначно определяет функцию, сгенерированную в течение одного из периодов расчета модели | Для раздела модели, выхода и кода обновления в отдельных функциях. Параметр конфигурации модели Single output/update function очищен. |
Периодическая многозадачная функция | Periodic: где аннотация, которая соответствует периоду шага расчета для периодического или непрерывного уровня многозадачной модели (например, D1) | , где однозначно определяет функцию, сгенерированную в течение одного из периодов расчета модели | Для блоков в основанной на уровне модели, сконфигурированной для многозадачности, выхода и кода обновления. Генератор кода производит функцию в течение каждого периода расчета. Параметр конфигурации модели Single output/update function выбран (значение по умолчанию). |
Периодическая многозадачная функция обновления | PeriodicUpdate: где аннотация, которая соответствует периоду шага расчета для периодического или непрерывного уровня многозадачной модели (например, D1) | и , где однозначно определяет функцию, сгенерированную в течение одного из периодов расчета модели | Для блоков в основанной на уровне модели, сконфигурированной для многозадачности, выхода и кода обновления в отдельных функциях. Генератор кода производит функции выхода и обновления в течение каждого периода расчета. Параметр конфигурации модели Single output/update function очищен. |
Периодическая однозадачная функция | Periodic |
| Для блоков в основанной на уровне модели, сконфигурированной для однозадачности, выхода и кода обновления. Параметр конфигурации модели Single output/update function выбран (значение по умолчанию). |
Периодическая однозадачная функция обновления | PeriodicUpdate | и
| Для блоков в основанной на уровне модели, сконфигурированной для однозадачности, выхода и кода обновления в отдельных функциях. Параметр конфигурации модели Single output/update function очищен. |
Функция сброса | Reset: где имя функции сброса в модели |
| Если модель включает блок Reset Function, сгенерированный код сброса. Чтобы сбросить условия или утвердить, вызовите функцию от кода приложения. |
Функция Simulink | Simulink Function: где имя блока Simulink Function в модели | для глобального блока Simulink Function или для ограниченного по объему блока Simulink Function | Для экспортированной модели функции, экспортируемой функции для блока Simulink Function. |
Оконечная функция | Terminate |
| Код для того, чтобы выключить систему. Для основанных на ERT моделей можно подавить генерацию этой функции путем очистки параметра конфигурации модели Terminate function required (Embedded Coder) (набор по умолчанию). |
Если у вас есть программное обеспечение Embedded Coder, чтобы упростить интегрирование внешнего и сгенерированного кода и достигнуть податливости со стандартами кода и инструкциями, можно сконфигурировать, как генератор кода производит функциональные интерфейсы из модели или подсистемы.
По умолчанию, для топ-моделей, генератор кода производит код, который не является допускающим повторное использование или повторно используемым. Функции точки входа имеют void-void
интерфейс. Код связывается с другим кодом путем прямого доступа к структурам глобальных данных, которые находятся в общей памяти.
Если ваше приложение требует допускающий повторное использование, код функции точки входа мультиэкземпляра, можно сконфигурировать генератор кода, чтобы вызвать каждую функцию (экземпляр) с уникальными данными. В этом случае код повторно используем.
Вы конфигурируете, являются ли функции точки входа допускающими повторное использование с параметром конфигурации модели Code interface packaging и связанные параметры. Установки параметров, которые вы выбираете, зависят от факторов, таких как выборы настройки для системного конечного файла, языка программирования и интерфейса аргумента.
По умолчанию, для GRT - и основанные на ERT системные конечные файлы, генератор кода производит одно экземпляр C функции точки входа. Сгенерированный код:
Создает функцию выполнения без аргументов (void-void
).
Выделяет память статически (во время компиляции) для структур данных модели.
Настройки параметра конфигурации модели по умолчанию для конфигурирования кода функции точки входа одно экземпляра:
Набор Language к C
.
Набор Code interface packaging к Nonreusable function
.
Можно сконфигурировать генератор кода, чтобы произвести допускающие повторное использование функции точки входа в C или для GRT - или для основанного на ERT системного конечного файла. Однако функциональные интерфейсы, которые генератор кода производит по умолчанию, варьируются. Предположение, что параметр конфигурации модели Language установлен в C
и Code interface packaging установлен в Reusable function
, генератор кода производит этот код функции точки входа для каждого системного сценария конечного файла.
Системный конечный файл | Интерфейс |
---|---|
Основанный на GRT |
|
Основанный на ERT |
|
Если вы используете основанный на ERT системный конечный файл и хотите сгенерировать допускающий повторное использование, мультиэкземпляр C функции точки входа, которые повторно используемы, рассматривают:
Используя динамическое выделение памяти, чтобы инициализировать структуры данных модели. Выберите Use dynamic memory allocation for model initialization (Embedded Coder).
При упаковке значений корневого уровня модели Inport блокируется в структуру, упаковке значений корневого уровня блоки Outport во вторую структуру и передаче структур функции выполнения в качестве аргументов ссылкой. Установите Pass root-level I/O as (Embedded Coder) на Structure reference
.
Упаковка значений корневого уровня модели блоки Inport и Outport блокируются в структуру данных модели реального времени и передача той структуры к функции выполнения в качестве аргумента ссылкой. Установите Pass root-level I/O as (Embedded Coder) на Part of model data structure
.
После генерации кода для модели используйте представление Code, чтобы рассмотреть сгенерированные функции точки входа и, если применимо, переменные, представляющие внешние порты ввода и вывода.
Добавьте #include
операторы к вашему внешнему коду, которые включают сгенерированные заголовочные файлы, которые объявляют функции точки входа модели.
Добавьте #include
оператор, который включает сгенерированный файл rtwtypes.h
. Этот файл предоставляет определения типа, #define
операторы и перечисления.
Инициализируйте целевые структуры данных и оборудование, такие как ADCs или DACs.
Если применимо инициализируйте данные для каждого экземпляра допускающей повторное использование модели.
Если применимо запишите входные данные в сгенерированные переменные, которые представляют блоки модели Inport.
Вызовите сгенерированные функции точки входа или настройте использование rt_OneStep
функция.
Если применимо считайте данные из сгенерированных переменных, которые представляют блоки модели Outport.
Для получения дополнительной информации смотрите, Развертывают Сгенерированные Программы Независимого исполняемого файла В Целевой компьютер (Embedded Coder).
Эти ограничения применяются к индивидуальным настройкам за сгенерированные интерфейсы функции C:
Необходимо выбрать параметр конфигурации модели Single output/update function.
Многоскоростные модели поддерживаются, но необходимо сконфигурировать модели для одного управления задачами.
Необходимо сконфигурировать импорт корневого уровня и выходные порты, чтобы использовать Default
класс памяти.
Если вы принимаете решение настроить функциональный интерфейс, необходимо обеспечить собственный main
программа. Вы не можете сконфигурировать функциональный интерфейс со статическим rt_main.c
тот MathWorks® обеспечивает. Определение функциональной интерфейсной настройки кроме значения по умолчанию создает несоответствие между сгенерированным кодом и статическим rt_main.c
по умолчанию.
Генератор кода удаляет структуру данных для корневого импорта модели, если подсистема, реализованная функцией одноразового использования, не использует значение одного или нескольких из импорта.
Генератор кода удаляет структуру данных для корневых выходных портов модели кроме тех случаев, когда вы включаете логгирование MAT-файла или если шаг расчета одного или нескольких выходных портов не является основной базовой ставкой (включая постоянный уровень).
Если вы копируете блок подсистемы, чтобы создать блок в новой модели или той же модели, функциональная интерфейсная информация от исходного блока подсистемы не копируется в новый блок подсистемы.
Если у вас есть Stateflow® для диаграммы Stateflow, которая использует корневое значение импорта модели, или это вызывает подсистему, которая использует корневое значение импорта модели, сделайте одно из следующих, чтобы сгенерировать код:
Снимите флажок Execute (enter) Chart At Initialization в диаграмме Stateflow.
Сделайте функцию Stateflow функцией одноразового использования.
Вставьте блок Simulink® Signal Conversion сразу после корневого импорта. В диалоговом окне параметров блоков Signal Conversion выберите Exclude this block from 'Block reduction' optimization.
Если корневое значение импорта модели соединяется с блоком преобразования Simscape™, вставьте блок Simulink Signal Conversion между корневым импортом и блок преобразования Simscape. В диалоговом окне параметров блоков Signal Conversion выберите Exclude this block from 'Block reduction' optimization.
При создавании модели, на которую ссылаются, которая сконфигурирована с функциональным интерфейсом, не используйте виртуальные шины в качестве вводов или выводов к модели, на которую ссылаются. Используйте невиртуальные шины вместо этого.
Если интерфейс функции C не является значением по умолчанию, значение проигнорировано для параметра конфигурации модели Pass fixed-size scalar root inputs by value for code generation. Для получения дополнительной информации смотрите скалярные корневые входные параметры фиксированного размера Передачи значением для генерации кода.
Function Caller | Simulink Function