Можно сконфигурировать невиртуальную подсистему, чтобы она входила в код подсистемы с кодом модели. В диалоговом окне Параметры параметр Function packaging задает формат сгенерированного кода подсистемы. Этот параметр имеет четыре настройки: Auto
, Inline
, Nonreusable function
, и Reusable function
. Генератор кода может сгенерировать inlined код для Auto
или Inline
настройки.
The Inline
установка явно предписывает генератору кода безоговорочно вводить в строку код подсистемы.
Значение по умолчанию Auto
Установка предписывает генератору кода сгенерировать наиболее эффективный код для подсистемы на основе типа и количества образцов подсистемы, которые существуют в модели. Когда существует только один образец подсистемы, Auto
установка строк кода подсистемы. Когда существует несколько образцов подсистемы, что не слишком сложно, Auto
установка строк кода для каждой подсистемы. В противном случае Auto
setting генерирует одну копию функции (как переиспользуемую функцию). Для подсистемы вызова функций с несколькими вызывающими абонентами Auto
установка генерирует код подсистемы, который соответствует Nonreusable function
настройка.
Чтобы сконфигурировать подсистему для встраивания:
Щелкните правой кнопкой мыши блок Subsystem. В контекстном меню выберите Block Parameters (Subsystem).
В диалоговом окне Subsystem Parameters, если подсистема является виртуальной, выберите Treat as atomic unit. Эта опция делает подсистему невиртуальной. На вкладке Code Generation теперь доступна опция Function packaging.
Щелкните вкладку Code Generation и выберите Auto
или Inline
от параметра Function packaging.
Нажмите Apply и закройте диалоговое окно.
Граница подсистемы сгущается, что указывает на ее невиртуальность.
Когда вы генерируете код из вашей модели, генератор кода строит код подсистемы внутри
или model
.c
(или в исходном файле родительской системы). Вы можете идентифицировать этот код по системным/блочным идентификационным тегам, таким как:model
.cpp
/* Atomic SubSystem Block: <Root>/AtomicSubsys1 */
Существуют определенные случаи, когда генератор кода не встраивает невиртуальную подсистему, даже если вы выбираете Inline
настройка.
Если нелинейная S-функция вызывает подсистему вызова функций, генератор кода игнорирует Inline
настройка. Поскольку нелинейные S-функции используют указатели на функцию для выполнения вызовов функции, генератор кода должен сгенерировать функцию со всеми присутствующими аргументами.
В цикле обратной связи, включающем подсистемы вызова функций, генератор кода генерирует функцию вместо встроенного кода для одной из подсистем. Основываясь на внутреннем, отсортированном порядке подсистем, генератор кода выбирает, какая подсистема будет генерировать функцию.
Если S-функция, Async Interrupt или Task Sync блок с опцией SS_OPTION_FORCE_NONINLINED_FCNCALL
установлено на TRUE
вызывает подсистему, генератор кода генерирует функцию вместо встроенного кода для подсистемы. VxWorks® библиотека блоков (vxlib1
), содержит пользовательские блоки Async Interrupt и Task Sync.[1]
[1] VxWork является зарегистрированным товарным знаком Wind River® Systems, Inc.