Сгенерируйте Inlined Subsystem Code

Можно сконфигурировать невиртуальную подсистему, чтобы она входила в код подсистемы с кодом модели. В диалоговом окне Параметры параметр Function packaging задает формат сгенерированного кода подсистемы. Этот параметр имеет четыре настройки: Auto, Inline, Nonreusable function, и Reusable function. Генератор кода может сгенерировать inlined код для Auto или Inline настройки.

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

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

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

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

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

  2. В диалоговом окне Subsystem Parameters, если подсистема является виртуальной, выберите Treat as atomic unit. Эта опция делает подсистему невиртуальной. На вкладке Code Generation теперь доступна опция 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-функция, Async Interrupt или Task Sync блок с опцией SS_OPTION_FORCE_NONINLINED_FCNCALL установлено на TRUE вызывает подсистему, генератор кода генерирует функцию вместо встроенного кода для подсистемы. VxWorks® библиотека блоков (vxlib1), содержит пользовательские блоки Async Interrupt и Task Sync.[1]

См. также


[1] VxWork является зарегистрированным товарным знаком Wind River® Systems, Inc.