exponenta event banner

Создание кода встроенной подсистемы

Можно сконфигурировать невиртуальную подсистему для встраивания кода подсистемы в код модели. В диалоговом окне «Параметры подсистемы» параметр упаковки «Функция» определяет формат сгенерированного кода подсистемы. Этот параметр имеет четыре параметра: Auto, Inline, Nonreusable function, и Reusable function. Генератор кода может генерировать встроенный код для Auto или Inline настройки.

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

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

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

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

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

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

  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 вызывает подсистему, генератор кода генерирует функцию вместо встроенного кода для подсистемы. Библиотека блоков VxWorks ® (vxlib1), содержит пользовательские блоки асинхронного прерывания и синхронизации задач. [1 ]

См. также


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