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