Встроенный код подсистемы

Можно сконфигурировать невиртуальную подсистему, чтобы встроить код подсистемы с типовым кодексом. В диалоговом окне Subsystem Parameters, устанавливая параметр Function packaging на Auto или Inline встраивает сгенерированный код подсистемы.

Auto опция является значением по умолчанию. Когда существует только один экземпляр подсистемы в модели, Auto опция встраивает код подсистемы. Когда несколько экземпляров подсистемы существуют, Auto опция приводит к одной копии функции (как допускающая повторное использование функция). Для подсистем вызова функций с несколькими вызывающими сторонами сгенерирован код подсистемы, как будто вы задали Nonreusable function.

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

Сконфигурируйте подсистему к встроенному коду

Сконфигурировать вашу подсистему для встраивания:

  1. Щелкните правой кнопкой по блоку Subsystem. Из контекстного меню выберите Block Parameters (Subsystem).

  2. В диалоговом окне Subsystem Parameters, если подсистема является виртуальной, выбирают Treat as atomic unit. Эта опция делает подсистему невиртуальной. На вкладке Code Generation опция Function packaging теперь доступна.

    Если система является уже невиртуальной, опция Function packaging уже выбрана.

  3. Кликните по вкладке Code Generation и выберите Auto или Inline от параметра Function packaging.

  4. Нажмите Apply и закройте диалоговое окно.

    Граница подсистемы утолщает, указывая, что это является невиртуальным.

Когда вы генерируете код из своей модели, генератор кода встраивает код подсистемы в modelC или 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.