Сконфигурируйте генерацию кода C для функций точки входа модели

Что такое функция точки входа?

Точка входа является местом в коде, где происходит передача управления программой (выполнение). Основная функция (main()) является точкой входа в программу C/C + + и вызывается, когда приложение начинает выполняться. Вызовы других функций, например, из main function, обеспечивают точки входа в код функции. Управление программой передается в вызываемую функцию. Код функции выполняется, и, когда закончен, возвращает управление в main или другой функции вызова.

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

В разделе Code Interface Report отчета генерации кода перечислены функции точки входа, которые производит генератор кода для модели. Для получения дополнительной информации смотрите Анализ сгенерированного кода (Embedded Coder).

Типы сгенерированных функций точки входа

Генератор кода производит функции точки входа для этих типов функций модели.

Тип функции моделиИмя исходного кода моделиИмя функции по умолчаниюОписание
Экспортированная функция (требует Embedded Coder®)ExportedFunction: slIdentifier, где slIdentifier - имя вызова функции Inport блока в моделиfunction-call-inport-block-name или signal-label (если указано)Для модели экспортированной функции экспортированная функция для подсистемы.
Инициализируйте функциюInitializemodel_initialize

Код инициализации для модели. В начале кода приложения вызовите функцию один раз. Не используйте эту функцию, чтобы сбросить структуру данных модели реального времени (rtM).

Функция разбиенияРаздел: slIdentifier, где slIdentifier - раздел, который был создан явно из блока в модели и показан в Simulink ® Редактор (например, P1)model_stepn, где n однозначно определяет функцию, сгенерированную для одного из периодов дискретизации моделиДля раздела модели выводите и обновляйте код. Выбран параметр конфигурации <reservedrangesplaceholder0> модели (по умолчанию).
Функция обновления разделовPartitionUpdate: slIdentifier, где slIdentifier - раздел, который был создан явно из блока в модели и показан в Simulink ® Редактор (например, P1)model_outputn и model_updaten, где n однозначно определяет функцию, сгенерированную для одного из периодов дискретизации моделиДля раздела модели выводите и обновляйте код в отдельных функциях. Модель параметра конфигурации <reservedrangesplaceholder0> очищена.
Периодическая функция многозадачностиПериодический: slIdentifier, где slIdentifier - аннотация, которая соответствует периоду шага расчета для периодической или непрерывной скорости многозадачной модели (для примера, D1)model_stepn, где n однозначно определяет функцию, сгенерированную для одного из периодов дискретизации моделиДля блоков в модели на основе скорости, настроенной для многозадачности, выхода и обновления кода. Генератор кода производит функцию для каждого периода дискретизации. Выбран параметр конфигурации <reservedrangesplaceholder0> модели (по умолчанию).
Функция периодического обновления многозадачностиPeriodicUpdate: slIdentifier, где slIdentifier - аннотация, которая соответствует периоду шага расчета для периодической или непрерывной скорости многозадачной модели (для примера, D1)model_outputn и model_updaten, где n однозначно определяет функцию, сгенерированную для одного из периодов дискретизации моделиДля блоков в модели на основе скорости, настроенной для многозадачности, выхода и обновления кода в отдельных функциях. Генератор кода производит выходы и обновленные функции для каждого периода дискретизации. Модель параметра конфигурации <reservedrangesplaceholder0> очищена.
Периодическая однозадачная функцияPeriodicmodel_stepДля блоков в модели на основе скорости, сконфигурированной для однозадачного, выхода и обновления кода. Выбран параметр конфигурации <reservedrangesplaceholder0> модели (по умолчанию).
Периодическая однозадачная функция обновленияPeriodicUpdatemodel_output и model_updateДля блоков в модели на основе скорости, сконфигурированной для однозадачного вывода, выхода и обновления кода в отдельных функциях. Модель параметра конфигурации <reservedrangesplaceholder0> очищена.
Функция сбросаСброс: slIdentifier, где slIdentifier - имя функции сброса в моделиmodel_reset-function-name

Если модель включает блок Reset Function, сбросьте сгенерированный код. Чтобы сбросить условия или состояние, вызовите функцию из кода приложения.

Функция SimulinkФункция Simulink: slIdentifier, где slIdentifier - имя блока Simulink Function в моделиfunction-name для блока глобального Simulink Function или model_function-name для масштабированного блока Simulink FunctionДля модели экспортированной функции экспортированная функция для блока Simulink Function.
Функция завершенияTerminatemodel_terminate

Код для выключения системы. Для моделей, основанных на ERT, можно подавить генерацию этой функции, очистив параметр конфигурации модели Terminate function required (Embedded Coder) (установлен по умолчанию).

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

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

По умолчанию для топовых моделей генератор кода производит код, который не является переиспользуемым или повторяющимся. Функции точки входа имеют void-void интерфейс. Код связывается с другим кодом путем прямого доступа к глобальным данным структурам, которые находятся в общей памяти.

Если вашему приложению требуется многократный код функции точки входа, можно сконфигурировать генератор кода, чтобы вызвать каждую функцию (экземпляр) с уникальными данными. При этом код перевходящий.

Вы конфигурируете, являются ли функции точки входа переиспользуемыми с помощью параметр конфигурации <reservedrangesplaceholder0> модели и связанных параметров. Настройки параметров, которые вы выбираете, зависят от таких факторов, как выбор строения для системного целевого файла, язык программирования и интерфейс аргументов.

Строения по умолчанию для функций точки входа с одним экземпляром C

По умолчанию для системных целевых файлов на основе GRT- и ERT генератор кода производит функции точки входа C с одним экземпляром. Сгенерированный код:

  • Создает функцию выполнения без аргументов (void-void).

  • Статическое выделение памяти (во время компиляции) для структур данных моделей.

Настройки параметров конфигурации модели по умолчанию для конфигурации кода функции точки входа с одним экземпляром:

Сгенерируйте переиспользуемые функции точки входа C с мультиобразцами

Можно сконфигурировать генератор кода, чтобы создать переиспользуемые функции точки входа на C для системного целевого файла на основе GRT или ERT. Однако функциональные интерфейсы, которые производит генератор кода, изменяются по умолчанию. Принимая, что параметр конфигурации <reservedrangesplaceholder1> модели установлено на C и Code interface packaging установлено на Reusable functionгенератор кода формирует этот код функции точки входа для каждого сценария целевого файла системы.

Системный целевой файлИнтерфейс
На основе GRT
  • Переиспользуемые функции точки входа C с мультиобразцами, которые являются входящими.

  • Упакует значения блоков Inport корневого уровня модели и блоков Outport в структуру данных модели реального времени. Передает эту структуру в функцию выполнения как аргумент путем ссылки.

  • Динамически выделяет память во время выполнения для данных образца модели. Выделяет память путем вызова функции, такой как malloc.

На основе ERT
  • Переиспользуемые функции точки входа C с мультиобразцами, которые являются входящими.

  • Передает значение каждого блока Inport корневого уровня модели и блока Outport в функцию выполнения как отдельный аргумент.

  • Статически выделяет память для структур данных моделей.

Если вы используете системный целевой файл на основе 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.

Интерфейс с сгенерированными функциями точки входа

  1. После генерации кода для модели используйте представление Code, чтобы просмотреть сгенерированные функции точки входа и, если применимо, переменные, представляющие внешние входные и выходные порты.

  2. Добавить #include операторы к вашему внешнему коду, которые включают сгенерированные файлы заголовков, которые объявляют функции точки входа модели.

  3. Добавление #include оператор, который включает сгенерированный файл rtwtypes.h. Этот файл содержит определения типов #define операторы и перечисления.

  4. Инициализируйте целевые структуры данных и оборудование, такие как АЦП или DAC.

  5. Если применимо, инициализируйте данные для каждого образца переиспользуемой модели.

  6. Если применимо, запишите входные данные в сгенерированные переменные, которые представляют блоки Inport модели.

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

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

См. также

|

Похожие темы