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

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

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

Для встроенного кода подсистемы выберите Inline. The 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 и закройте диалоговое окно.

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

Когда вы генерируете код из вашей модели, генератор кода строит код подсистемы внутри 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] VxWork является зарегистрированным товарным знаком Wind River® Systems, Inc.