В этом примере показано, как сопоставить подсистемы в модели с именами функций и файлами.
Узнать, как к:
Задайте функцию и имена файлов в сгенерированном коде.
Идентифицируйте части сгенерированного кода, которые требуются для интегрирования.
Сгенерируйте код для атомарных подсистем.
Идентифицируйте данные, которые требуются, чтобы выполнять сгенерированную функцию.
Для получения информации о модели в качестве примера и других примерах в этом ряду, смотрите, Готовят Модель Алгоритма управления к генерации кода C.
Модели в качестве примера в Готовят Модель Алгоритма управления к генерации кода C и Конфигурируют Интерфейс Данных в виртуальных подсистемах использования Сгенерированного кода. Виртуальные подсистемы визуально организуют блоки, но не влияют на функциональность модели. Атомарные подсистемы оценивают блоки, включенные в модель как модуль. С атомарными подсистемами можно указать дополнительную информацию разделения функции. В модели атомарные подсистемы появляются с полужирной границей.
Откройте модель rtwdemo_PCG_Eval_P3 в качестве примера.
Сохраните копию модели к перезаписываемой папке.
В этом примере показано, как заменить виртуальные подсистемы на подсистемы вызова функций. Function-Call подсистемы:
Атомарные подсистемы
Позвольте вам управлять порядком выполнения подсистемы
Выполнитесь, когда вызов функции будет сигнализировать о триггерах
Путем управления порядком выполнения подсистем можно совпадать с моделью существующей системе, которая имеет определенный порядок выполнения.
Фигура идентифицирует подсистемы вызова функции (1) PI_ctrl_1
, PI_ctrl_2
, и Pos_Command_Arbitration
.
Эта версия модели содержит новую подсистему Execution_Order_Control
(2), который содержит график Stateflow®, который моделирует функциональность вызова планировщика. Подсистема управляет порядком выполнения подсистем вызова функции через сигналы вызова функции (3). Позже в этом примере, вы исследуете, как изменение порядка выполнения может изменить результаты симуляции.
Эта версия модели содержит новые блоки Преобразования Сигнала (4) при выходных параметрах ПИ-контроллеров. С этими дополнительными блоками на месте, генератор кода может сгенерировать одну повторно используемую функцию для ПИ-контроллеров.
В Готовят Модель Алгоритма управления к генерации кода C и Конфигурируют Интерфейс Данных в Сгенерированном коде, генератор кода создает сингл model
_step
функция, которая содержит код алгоритма управления. Однако много приложений требуют большего уровня управления размещением файла функций. Путем изменения параметров атомарных подсистем можно задать несколько функций в одной модели.
Рисунок показывает параметры подсистемы для PI_ctrl_1
.
Обработайте как атомарный модуль
Включает другие подменю. Для атомарных подсистем этот параметр автоматически выбран и отключен.
Размер шага
Задает шаг расчета для выполнения. Не доступный для подсистем вызова функций.
Функция упаковочные опции
Auto
- Определяет, как подсистема появляется в сгенерированном коде. Это значение является значением по умолчанию.
Inline
- Помещает код подсистемы, встроенный с остальной частью типового кодекса.
Function
- Генерирует код для подсистемы как функция.
Reusable function
- Генерирует допускающую повторное использование (повторно используемую) функцию от подсистемы. Функция передает все входные и выходные данные через формальные параметры. Функция непосредственно не получает доступ к глобальным переменным.
Опции имени функции
Выбор Function
или Reusable function
поскольку Функциональная упаковка включает опции имени функции.
Auto
- Определяет функцию.
Use subsystem name
- Основывает функцию на имени подсистемы.
User specified
- Применяет заданное имя файла.
Опции имени файла
Выбор Function
или Reusable function
поскольку Функциональная упаковка включает опции имени файла.
Auto
- Помещает функциональное определение в модуль, сгенерированный для родительской системы, или, если корень модели является родительским элементом в model.c
.
Use subsystem name
- Генерирует отдельный файл. Имя файла является именем подсистемы или библиотечного блока.
Use function name
- Генерирует отдельный файл. Имя файла является именем, которое вы задаете с опциями Имени функции.
User specified
- Применяет заданное, уникальное имя файла.
Функция с отдельными данными
Enabled, когда вы упаковка функции множества к Function
. Когда выбрано, генератор кода разделяет внутренние данные подсистемы (например, сигналы) из данных родительской модели. Подсистема владеет этими отдельными данными.
Embedded Coder® поддерживает повторно используемый код. Повторно используемый код является допускающей повторное использование стандартной программой программирования, которую несколько программ могут использовать одновременно. Повторно используемый код используется в операционных системах и другом системном программном обеспечении, которое использует многопоточность, чтобы обработать параллельные события. Повторно используемый код не обеспечивает данные состояния, таким образом, нет никаких персистентных переменных в функции. Программы вызова обеспечивают переменные состояния и должны передать данные состояния в функцию. Многий пользователь или процессы могут совместно использовать одну копию повторно используемой функции.
Чтобы сгенерировать повторно используемый код, необходимо сначала задать подсистему как допускающую повторное использование путем конфигурирования упаковки Функции параметра подсистемы.
В некоторых случаях настройка модели предотвращает повторно используемый код. Таблица приводит распространенные проблемы.
Cause Solution
Subsystem output feeds global signal Add a Signal Conversion block between the data subsystem and the global signal.
Generated function receives data Select Configuration Parameters > (formal parameters) through pointers Model Referencing > Pass fixed-size scalar root inputs by value for code generation.
Subsystem uses global signal data Use a port to pass the global data in and out in internal algorithm of the subsystem.
Чтобы задать алгоритмические данные о параметре (такие как усиление или коэффициент) вне осциллографа допускающего повторное использование библиотечного блока или подсистемы, можно применить маску к блоку или подсистеме и создать параметр маски. Можно затем задать различное значение параметров для каждого экземпляра блока или подсистемы. Каждый параметр маски появляется в сгенерированном коде как формальный параметр повторно используемой функции.
В этой версии модели, подсистемы PI_ctrl_1
и PI_ctrl_2
маскируются. В каждой маске, значениях P
и I
усиления установлены объектами данных, такими как I_Gain_2
и P_Gain_2
.
В Готовят Модель Алгоритма управления к генерации кода C и Конфигурируют Интерфейс Данных в Сгенерированном коде, вы генерируете код на корневом уровне модели. В качестве альтернативы можно создать определенную подсистему.
Чтобы инициировать сборку подсистемы, используйте контекстное меню. Можно выбрать из этих опций:
Создайте Эту Подсистему: Обрабатывает подсистему как отдельный режим и создает полный набор источника C файлы и заголовочные файлы. Эта опция не поддерживает подсистемы вызова функций.
Сгенерируйте S-функцию: Генерирует код С для подсистемы и создает обертку S-функции. Можно затем симулировать код в исходной модели. Эта опция не поддерживает подсистемы вызова функций.
Экспорты функций: Генерирует код С без кода планирования, который идет со Сборкой Эта опция Подсистемы. Используйте эту опцию, чтобы создать подсистемы, которые используют триггеры, такие как подсистемы вызова функций.
В качестве альтернативы откройте приложение Embedded Coder, выберите подсистему и на вкладке C Code, нажмите Build.
Этот пример сравнивает файлы, которые сгенерированы для полной системной сборки с файлами, которые сгенерированы для экспортируемых функций. Вы также исследуете, как данные маскированные появляются в коде.
Запустите скрипт сборки для этих трех опций. Затем исследуйте сгенерированные файлы путем нажатия на гиперссылки.
rtwdemo_PCG_Eval_P3.c
Полная сборка: Да, Ступенчатая функция
PI_ctrl_1: нет
Pos_Command_Arbitration: нет
PI_ctrl_1.c
Полная сборка: нет
PI_ctrl_1: Да, Триггерная функция
Pos_Command_Arbitration: нет
Pos_Command_Arbitration.c
Полная сборка: нет
PI_ctrl_1: нет
Pos_Command_Arbitration: да, Init и функция
PI_Ctrl_Reusable.c
ert_main.c
eval_data.c
(1) eval_data.c
имеет различное содержимое в сборках полного и экспорта функций. Полная сборка включает все параметры, которые использует модель. Экспорт функций содержит только переменные, которые использует подсистема.
Данные маскированные в сгенерированном коде
В файле rtwdemo_PCG_Eval_P3.c
, сайты вызова повторно используемой функции используют объекты данных P_Gain
, I_Gain
, P_Gain_2
, и I_Gain_2
в качестве аргументов.
По умолчанию Simulink® выполняет подсистемы в этом порядке:
PI_ctrl_1
PI_ctrl_2
Pos_Command_Arbitration
В данном примере можно задать один из двух альтернативных порядков выполнения. Можно затем использовать тестовую обвязку, чтобы наблюдать эффект порядка выполнения на результатах симуляции. Подсистема Execution_Order_Control
имеет две настройки, которые управляют порядком выполнения. Чтобы выбрать настройку, используйте контекстное меню подсистемы.
Измените порядок выполнения и наблюдайте результаты.
Результаты симуляции (положение дросселя в зависимости от времени) варьируются немного в зависимости от порядка выполнения. Вы видите различие наиболее ясно, когда запрос дросселя изменяется.
Для следующего примера в этом ряду смотрите Вызов Внешний код С из Типового кодекса и Сгенерированного кода.