exponenta event banner

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

Можно сконфигурировать невиртуальную подсистему для встраивания кода подсистемы в код модели. В диалоговом окне «Параметры подсистемы» установите для параметра Function packaging значение Auto или Inline встраивает сгенерированный код подсистемы.

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

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

Настройка подсистемы для встроенного кода

Чтобы настроить подсистему для встраивания, выполните следующие действия.

  1. Щелкните правой кнопкой мыши блок «Подсистема». В контекстном меню выберите «Параметры блока (подсистема)».

  2. В диалоговом окне Параметры подсистемы (Subsystem Parameters), если подсистема является виртуальной, выберите Обработать как атомную единицу (Treat as atomic unit). Эта опция делает подсистему невиртуальной. На закладке Создание кода теперь доступна опция Упаковка функций.

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

  3. Перейдите на вкладку Создание кода и выберите Auto или Inline из параметра Function packaging.

  4. Нажмите кнопку Применить (Apply) и закройте диалоговое окно.

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

При создании кода из модели генератор кода встраивает код подсистемы в model.c или model.cpp (или в исходном файле родительской системы). Этот код можно идентифицировать по идентификаторам системы/блока, например:

/* Atomic SubSystem Block: <Root>/AtomicSubsys1 */

Исключения для встраивания

Существуют определенные случаи, когда генератор кода не вводит в систему непровиртуальную подсистему, даже если выбран параметр Inline.

  • Если подсистема является подсистемой вызова функции, вызываемой неинлинированной S-функцией, параметр Inline игнорируется. Неинлинированные S-функции выполняют вызовы с помощью указателей функций. Следовательно, подсистема вызова функции должна генерировать функцию со всеми имеющимися аргументами.

  • В контуре обратной связи, включающем подсистемы функционального вызова, генератор кода вынуждает одну из подсистем генерироваться как функцию вместо того, чтобы встраивать ее. На основании порядка, в котором подсистемы сортируются внутри, программное обеспечение выбирает подсистему, которая должна быть сгенерирована как функция.

  • Если подсистема вызывается из S-функционального блока, который устанавливает опцию SS_OPTION_FORCE_NONINLINED_FCNCALL кому TRUE, он не встроен. Этот результат может возникнуть при наличии пользовательских блоков асинхронных прерываний или блоков синхронизации задач. Такие блоки должны создаваться как функции. Эти блоки расположены в vxlib1 блокировать библиотеку и использовать SS_OPTION_FORCE_NONINLINED_FCNCALL вариант. Эта библиотека демонстрирует интеграцию с примером RTOS (VxWorks ®). [ 1]

Примечание

Можно использовать блоки в vxlib1 (асинхронное прерывание и синхронизация задач) для моделирования и создания кода. Эти блоки содержат начальные примеры, помогающие разрабатывать пользовательские блоки для целевой среды.


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