Можно сконфигурировать невиртуальную подсистему, чтобы встроить код подсистемы с типовым кодексом. В диалоговом окне 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
, это не встраивается. Когда пользовательские Асинхронные блоки Прерывания или блоки Синхронизации Задачи присутствуют, этот результат может произойти. Такие блоки должны быть сгенерированы как функции. Эти блоки расположены в библиотеке блоков vxlib1
и используют опцию SS_OPTION_FORCE_NONINLINED_FCNCALL
. Эта библиотека демонстрирует интеграцию с примером RTOS (VxWorks®). [1]
Можно использовать блоки в библиотеке vxlib1
(Simulink Coder) (Асинхронная Синхронизация Прерывания и Задачи) для симуляции и генерации кода. Эти блоки обеспечивают примеры отправной точки, чтобы помочь вам разработать авторские блоки для своего целевого окружения.
[1] VxWorks является зарегистрированной торговой маркой Ветра River® Systems, Inc.