Точка входа - это местоположение в коде, где происходит передача программного управления (выполнения). Основная функция (main()) является точкой входа в программу C/C + + и вызывается при запуске приложения. Вызовы других функций, например, из main , укажите точки входа в код функции. Управление программой передается вызываемой функции. Код функции выполняется, и по завершении возвращается управление к main или другая вызывающая функция.
При создании кода для модели генератор кода определяет набор функций точки входа, которые можно вызвать для выполнения созданного кода. Созданные функции можно вызвать из внешнего кода или из версии созданной основной функции, которую требуется изменить.
В разделе «Отчет по кодовому интерфейсу» отчета о создании кода перечислены функции точки входа, создаваемые генератором кода для модели. Дополнительные сведения см. в разделе Анализ сгенерированного интерфейса кода (встроенный кодер).
Генератор кода создает функции точки входа для этих типов функций модели.
| Тип функции модели | Имя источника модели | Имя созданной по умолчанию функции | Описание |
|---|---|---|---|
| Экспортированная функция (требуется 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 Function: где - имя блока Simulink Function в модели | для глобального функционального блока Simulink или для функционального блока Simulink в области | Для модели экспортируемой функции экспортируемая функция для блока Simulink Function. |
| Завершить функцию | Terminate | | Код отключения системы. Для моделей на основе ERT можно подавить генерацию этой функции, очистив параметр конфигурации модели Terminate function required (Embedded Coder) (установленный по умолчанию). |
При наличии программного обеспечения Embedded Coder для упрощения интеграции внешнего и сгенерированного кода и обеспечения соответствия стандартам и рекомендациям по кодированию можно настроить способ создания генератором кода функциональных интерфейсов из модели или подсистемы.
По умолчанию для верхних моделей генератор кода создает код, который не может быть повторно использован или повторно введен. Функции начального уровня имеют void-void интерфейс. Код взаимодействует с другим кодом посредством прямого доступа к глобальным структурам данных, которые находятся в общей памяти.
Если приложению требуется многократно используемый многоэкземплярный код функции начального уровня, можно настроить генератор кода для вызова каждой функции (экземпляра) с уникальными данными. В этом случае код повторно вводится.
Можно настроить возможность повторного использования функций точки входа с параметром конфигурации модели Кодовая упаковка интерфейса и связанными параметрами. Выбранные параметры зависят от таких факторов, как выбор конфигурации для целевого файла системы, языка программирования и интерфейса аргументов.
По умолчанию для целевых системных файлов на основе GRT и ERT генератор кода создает одинарные функции точки входа C. Созданный код:
Создает функцию выполнения без аргументов (void-void).
Распределяет память статически (во время компиляции) для структур данных модели.
Настройки параметров конфигурации модели по умолчанию для настройки кода функции начальной точки в одном экземпляре:
Язык установлен в значение C.
Пакет интерфейса кода имеет значение Nonreusable function.
Можно настроить генератор кода для создания повторно используемых функций точки входа в C для целевого файла системы на основе GRT или ERT. Однако интерфейсы функций, создаваемые генератором кода по умолчанию, различаются. Предполагается, что параметру конфигурации модели Language присвоено значение C и для упаковки интерфейса кода установлено значение Reusable functionгенератор кода создает этот функциональный код точки входа для каждого сценария целевого файла системы.
| Системный целевой файл | Интерфейс |
|---|---|
| На основе GRT |
|
| На основе ERT |
|
Если вы используете целевой системный файл на основе ERT и хотите создать многократно используемые многоэкземплярные функции точки входа C, которые могут быть введены повторно, рассмотрите:
Использование динамического выделения памяти для инициализации структур данных модели. Выберите Использовать динамическое выделение памяти для инициализации модели (Embedded Coder).
Упаковка значений блоков Inport на уровне корня модели в структуру, упаковка значений блоков Outport на уровне корня во вторую структуру и передача структур функции выполнения в качестве аргументов по ссылке. Установите для параметра Pass root-level I/O (Embedded Coder) значение Structure reference.
Упаковка значений блоков Inport и Outport корневого уровня модели в структуру данных модели в реальном времени и передача этой структуры функции выполнения в качестве аргумента по ссылке. Установите для параметра Pass root-level I/O (Embedded Coder) значение Part of model data structure.
После создания кода для модели используйте представление «Код» для просмотра сгенерированных функций точки входа и, если применимо, переменных, представляющих внешние порты ввода и вывода.
Добавить #include к внешнему коду, включающему созданные файлы заголовков, объявляющие функции точки входа модели.
Добавить #include оператор, включающий сгенерированный файл rtwtypes.h. Этот файл содержит определения типов, #define операторы и перечисления.
Инициализация целевых структур данных и аппаратных средств, таких как ADC или DAC.
Если применимо, инициализируйте данные для каждого экземпляра повторно используемой модели.
При необходимости запишите входные данные в сгенерированные переменные, представляющие блоки ввода модели.
Вызовите сгенерированные функции точки входа или настройте использование rt_OneStep функция.
Если применимо, считывайте данные из сгенерированных переменных, которые представляют блоки Outport модели.
Дополнительные сведения см. в разделе Развертывание созданных автономных исполняемых программ на целевом оборудовании (встроенный кодер).
Эти ограничения применяются к настройкам для сгенерированных интерфейсов функций C:
Необходимо выбрать параметр конфигурации модели Single output/update function.
Многоскоростные модели поддерживаются, но необходимо настроить модели для одиночных задач.
Необходимо настроить порты ввода и экспорта на корневом уровне для использования Default класс хранения.
Если вы решили настроить интерфейс функции, вы должны предоставить свой собственный пользовательский main программа. Невозможно настроить интерфейс функции со статическим rt_main.c которые предоставляет MathWorks ®. Указание конфигурации интерфейса функции, отличной от конфигурации по умолчанию, создает несоответствие между сгенерированным кодом и статическим кодом по умолчаниюrt_main.c.
Генератор кода удаляет структуру данных для корневых входов модели, если подсистема, реализованная неиспользуемой функцией, не использует значение одного или нескольких входов.
Генератор кода удаляет структуру данных для корневых выходов модели, за исключением тех случаев, когда включено ведение журнала MAT-файла или если время выборки одного или нескольких выходов не является основной базовой скоростью (включая постоянную скорость).
При копировании блока подсистемы для создания блока в новой модели или той же модели информация интерфейса функции из исходного блока подсистемы не копируется в новый блок подсистемы.
Если у вас есть Stateflow ®, для диаграммы Stateflow, которая использует значение корневого ввода модели или вызывает подсистему, использующую значение корневого ввода модели, выполните одно из следующих действий для создания кода:
Снимите флажок Выполнить (ввод) диаграмму при инициализации в диаграмме потока состояний.
Сделать функцию Stateflow неиспользуемой функцией.
Вставьте блок преобразования сигналов Simulink ® сразу после корневого входа. В диалоговом окне Параметры блока преобразования сигналов выберите Исключить этот блок из оптимизации «Уменьшение блока».
Если значение корневого входа модели соединяется с блоком преобразования Simscape™, вставьте блок преобразования сигнала Simulink между корневым входом и блоком преобразования Simscape. В диалоговом окне Параметры блока преобразования сигналов выберите Исключить этот блок из оптимизации «Уменьшение блока».
При построении ссылочной модели, сконфигурированной с функциональным интерфейсом, не используйте виртуальные шины в качестве входных или выходных данных ссылочной модели. Вместо этого используйте невиртуальные шины.
Если интерфейс функции C не является интерфейсом по умолчанию, значение игнорируется для параметра конфигурации модели Pass fixed-size scalar root input by value for code generation. Дополнительные сведения см. в разделе Передача скалярных входных значений корня фиксированного размера по значению для создания кода.
Вызывающий абонент функции | Функция симулятора