Точка входа является местом в коде, где происходит передача управления программой (выполнение). Основная функция (main()
) является точкой входа в программу C/C + + и вызывается, когда приложение начинает выполняться. Вызовы других функций, например, из main
function, обеспечивают точки входа в код функции. Управление программой передается в вызываемую функцию. Код функции выполняется, и, когда закончен, возвращает управление в main
или другой функции вызова.
При производстве кода для модели генератор кода задает набор функций точки входа, которые можно вызвать, чтобы выполнить сгенерированный код. Можно вызвать сгенерированные функции из внешнего кода или из версии сгенерированной основной функции, которую вы изменяете.
В разделе Code Interface Report отчета генерации кода перечислены функции точки входа, которые производит генератор кода для модели. Для получения дополнительной информации смотрите Анализ сгенерированного кода (Embedded Coder).
Генератор кода производит функции точки входа для этих типов функций модели.
Тип функции модели | Имя исходного кода модели | Имя функции по умолчанию | Описание |
---|---|---|---|
Экспортированная функция (требует Embedded Coder®) | ExportedFunction: , где - имя вызова функции Inport блока в модели | или (если указано) | Для модели экспортированной функции экспортированная функция для подсистемы. |
Инициализируйте функцию | Initialize |
| Код инициализации для модели. В начале кода приложения вызовите функцию один раз. Не используйте эту функцию, чтобы сбросить структуру данных модели реального времени ( |
Функция разбиения | Раздел: , где - раздел, который был создан явно из блока в модели и показан в Simulink ® Редактор (например, P1) | , где однозначно определяет функцию, сгенерированную для одного из периодов дискретизации модели | Для раздела модели выводите и обновляйте код. Выбран параметр конфигурации <reservedrangesplaceholder0> модели (по умолчанию). |
Функция обновления разделов | PartitionUpdate: , где - раздел, который был создан явно из блока в модели и показан в Simulink ® Редактор (например, P1) | и , где однозначно определяет функцию, сгенерированную для одного из периодов дискретизации модели | Для раздела модели выводите и обновляйте код в отдельных функциях. Модель параметра конфигурации <reservedrangesplaceholder0> очищена. |
Периодическая функция многозадачности | Периодический: где - аннотация, которая соответствует периоду шага расчета для периодической или непрерывной скорости многозадачной модели (для примера, D1) | , где однозначно определяет функцию, сгенерированную для одного из периодов дискретизации модели | Для блоков в модели на основе скорости, настроенной для многозадачности, выхода и обновления кода. Генератор кода производит функцию для каждого периода дискретизации. Выбран параметр конфигурации <reservedrangesplaceholder0> модели (по умолчанию). |
Функция периодического обновления многозадачности | PeriodicUpdate: где - аннотация, которая соответствует периоду шага расчета для периодической или непрерывной скорости многозадачной модели (для примера, D1) | и , где однозначно определяет функцию, сгенерированную для одного из периодов дискретизации модели | Для блоков в модели на основе скорости, настроенной для многозадачности, выхода и обновления кода в отдельных функциях. Генератор кода производит выходы и обновленные функции для каждого периода дискретизации. Модель параметра конфигурации <reservedrangesplaceholder0> очищена. |
Периодическая однозадачная функция | Periodic |
| Для блоков в модели на основе скорости, сконфигурированной для однозадачного, выхода и обновления кода. Выбран параметр конфигурации <reservedrangesplaceholder0> модели (по умолчанию). |
Периодическая однозадачная функция обновления | PeriodicUpdate | и
| Для блоков в модели на основе скорости, сконфигурированной для однозадачного вывода, выхода и обновления кода в отдельных функциях. Модель параметра конфигурации <reservedrangesplaceholder0> очищена. |
Функция сброса | Сброс: где - имя функции сброса в модели |
| Если модель включает блок Reset Function, сбросьте сгенерированный код. Чтобы сбросить условия или состояние, вызовите функцию из кода приложения. |
Функция Simulink | Функция Simulink: где - имя блока Simulink Function в модели | для блока глобального Simulink Function или для масштабированного блока Simulink Function | Для модели экспортированной функции экспортированная функция для блока Simulink Function. |
Функция завершения | Terminate |
| Код для выключения системы. Для моделей, основанных на ERT, можно подавить генерацию этой функции, очистив параметр конфигурации модели Terminate function required (Embedded Coder) (установлен по умолчанию). |
Если у вас есть программное обеспечение Embedded Coder, для облегчения интегрирования внешнего и сгенерированного кода и достижения податливости стандартам кода и руководствам, можно сконфигурировать, как генератор кода производит функциональные интерфейсы из модели или подсистемы.
По умолчанию для топовых моделей генератор кода производит код, который не является переиспользуемым или повторяющимся. Функции точки входа имеют void-void
интерфейс. Код связывается с другим кодом путем прямого доступа к глобальным данным структурам, которые находятся в общей памяти.
Если вашему приложению требуется многократный код функции точки входа, можно сконфигурировать генератор кода, чтобы вызвать каждую функцию (экземпляр) с уникальными данными. При этом код перевходящий.
Вы конфигурируете, являются ли функции точки входа переиспользуемыми с помощью параметр конфигурации <reservedrangesplaceholder0> модели и связанных параметров. Настройки параметров, которые вы выбираете, зависят от таких факторов, как выбор строения для системного целевого файла, язык программирования и интерфейс аргументов.
По умолчанию для системных целевых файлов на основе GRT- и ERT генератор кода производит функции точки входа C с одним экземпляром. Сгенерированный код:
Создает функцию выполнения без аргументов (void-void
).
Статическое выделение памяти (во время компиляции) для структур данных моделей.
Настройки параметров конфигурации модели по умолчанию для конфигурации кода функции точки входа с одним экземпляром:
Language установлено на C
.
Code interface packaging установлено на Nonreusable function
.
Можно сконфигурировать генератор кода, чтобы создать переиспользуемые функции точки входа на C для системного целевого файла на основе GRT или ERT. Однако функциональные интерфейсы, которые производит генератор кода, изменяются по умолчанию. Принимая, что параметр конфигурации <reservedrangesplaceholder1> модели установлено на C
и Code interface packaging установлено на Reusable function
генератор кода формирует этот код функции точки входа для каждого сценария целевого файла системы.
Системный целевой файл | Интерфейс |
---|---|
На основе GRT |
|
На основе ERT |
|
Если вы используете системный целевой файл на основе ERT и хотите сгенерировать переиспользуемые мультиобразцы, которые являются входящими, примите во внимание:
Использование динамического выделения памяти для инициализации структур данных моделей. Выберите 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
операторы и перечисления.
Инициализируйте целевые структуры данных и оборудование, такие как АЦП или DAC.
Если применимо, инициализируйте данные для каждого образца переиспользуемой модели.
Если применимо, запишите входные данные в сгенерированные переменные, которые представляют блоки Inport модели.
Вызовите сгенерированные функции точки входа или настройте использование rt_OneStep
функция.
Если применимо, считайте данные из сгенерированных переменных, которые представляют блоки Outport модели.
Для получения дополнительной информации смотрите Развертывание сгенерированных автономных исполняемых программ на целевом компьютере (Embedded Coder).
Эти ограничения применяются к индивидуальным настройкам сгенерированных интерфейсов С-функций:
Необходимо выбрать параметр конфигурации модели 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 не является интерфейсом по умолчанию, значение игнорируется для параметр конфигурации <reservedrangesplaceholder0> модели. Для получения дополнительной информации смотрите Передайте скалярные корневые входы фиксированного размера по значению для генерации кода.
Function Caller | Simulink Function