Управляйте генерацией функций для подсистем

Что такое функция подсистемы?

Функция подсистемы является функцией, которую генератор кода производит для подсистемы в модели. Интерфейс функции и то, как генератор кода упаковывает код, зависит от того, является ли подсистема виртуальной или атомарной (невиртуальной) подсистемой и как вы конфигурируете параметры блоков подсистемы. Для получения дополнительной информации см. Subsystem, Атомарная Подсистема, CodeReuse Subsystem.

Опции для управления генерацией кода функции подсистемы

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

КомуПосмотрите
Сгенерируйте inlined код из выбранной подсистемы.Встроенный код подсистемы
Сгенерируйте код только для подсистемы.Сгенерируйте код и исполняемые файлы для отдельных подсистем
Сгенерируйте отдельные функции без аргументов и опционально поместите код подсистемы в отдельный файл.Сгенерируйте код подсистемы как отдельную функцию и файлы
Сгенерируйте одну входящую функцию для подсистемы, которая включена в несколько мест в модели.Сгенерируйте входящий код из подсистем
Сгенерируйте одну входящую функцию для подсистемы, которая включена в несколько мест в иерархии модели-ссылки.Сгенерируйте переиспользуемый код из библиотечных подсистем, общих для моделей
Сгенерируйте код для переиспользуемой подсистемы библиотеки, которая содержит несколько функциональных интерфейсов.Библиотечная генерация кода для переиспользуемых библиотечных подсистем (Embedded Coder)

Зависимость функций подсистемы

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

Чтобы сгенерировать код функции подсистемы, который не зависит от кода, сгенерированного для родительской модели, поместите подсистему в библиотеку и сконфигурируйте ее как повторно используемую подсистему, как объяснено в Generate Reusable Code from Library Subsystems Shared Across Models.

Если у вас есть Embedded Coder® лицензия, можно сгенерировать код для библиотеки, состоящей из переиспользуемых подсистем, которые имеют различные функциональные интерфейсы. Для получения дополнительной информации смотрите Library-Based Code Generation for Reusable Library Subsystems (Embedded Coder).

Сохраните контуры подсистемы в сгенерированном коде

В этом примере показано, как сохранить контур виртуальной подсистемы. Выбирая параметр подсистемы Treat as atomic unit, вы инструктируете генератор кода создать код для подсистемы так, чтобы он выполнялся как атомарный модуль. Если вы пометили систему как атомарную, можно задать, как генератор кода представляет подсистему в коде, установив параметры блоков Генерации кода Function Packaging. Можно задать, что генератор кода производит эти реализации кода для подсистемы:

  • Inline: Вводите код подсистемы в сайты вызовов

  • Функция: Пустая/пустая функция с вводом-выводом и внутренними данными в глобальные данные структуре

  • Переиспользуемая функция: Повторно входящая функция с данными, переданными как часть аргументов функции

  • Auto: Пусть Simulink Coder оптимизирует реализацию на основе контекста

1. Сгенерируйте код и отчет генерации кода.

2. Используйте сгенерированный отчет для просмотра сгенерированного исходного файла rtwdemo_atomic.c. Для SS1генератор кода производит код переиспользуемой функции с именем функции myfun.

Simulink и Simulink Coder могут избежать искусственных алгебраических циклов, если вы выбираете параметр Minimize algebraic loop excurrences. Смотрите документацию Simulink для получения информации о минимизации вхождений алгебраических циклов.

Пример модели

model = 'rtwdemo_atomic';
open_system(model);

Похожие темы