exponenta event banner

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

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

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

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

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

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

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

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

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

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

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

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

  • Inline: Встроить код подсистемы на узлах вызовов

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

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

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

1. Создание кода и отчета о создании кода.

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

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

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

model = 'rtwdemo_atomic';
open_system(model);

Связанные темы