Можно сконфигурировать невиртуальную подсистему, чтобы встроить код подсистемы с типовым кодексом. В диалоговом окне Subsystem Parameters параметр Function packaging задает формат сгенерированного кода подсистемы. Этот параметр имеет четыре настройки: Auto
, Inline
, Nonreusable function
и Reusable function
. Генератор кода может сгенерировать встроенный код для настроек Auto
или Inline
.
Установка Inline
явным образом направляет генератор кода, чтобы встроить код подсистемы безусловно.
Установка Auto
по умолчанию направляет генератор кода, чтобы сгенерировать самый эффективный код для подсистемы на основе типа и количества экземпляров подсистемы, которые существуют в модели. Когда существует только один экземпляр подсистемы, установка Auto
встраивает код подсистемы. Когда существует несколько экземпляров подсистемы, которая является не слишком комплексной, установка Auto
встраивает код для каждой подсистемы. В противном случае установка Auto
генерирует одну копию функции (как допускающая повторное использование функция). Для подсистемы вызова функций с несколькими вызывающими сторонами установка Auto
генерирует код подсистемы, который сопоставим с установкой Nonreusable function
.
Сконфигурировать вашу подсистему для встраивания:
Щелкните правой кнопкой по блоку Subsystem. Из контекстного меню выберите Block Parameters (Subsystem).
В диалоговом окне Subsystem Parameters, если подсистема является виртуальной, выбирают Treat as atomic unit. Эта опция делает подсистему невиртуальной. На вкладке Code Generation опция Function packaging теперь доступна.
Кликните по вкладке Code Generation и выберите Auto
или Inline
от параметра Function packaging.
Нажмите Apply и закройте диалоговое окно.
Граница подсистемы утолщает, указывая, что это является невиртуальным.
Когда вы генерируете код из своей модели, генератор кода встраивает код подсистемы в
или model.c
(или в исходном файле его родительской системы). Можно идентифицировать этот код тегами системы/идентификации блока, такими как:model.cpp
/* Atomic SubSystem Block: <Root>/AtomicSubsys1 */
Существуют определенные случаи, в которых генератор кода не встраивает невиртуальную подсистему, даже при том, что вы выбираете установку Inline
.
Если невстроенные S-вызовы-функции подсистема вызова функций, генератор кода игнорирует установку Inline
. Поскольку невстроенные S-функции используют указатели функции, чтобы сделать вызовы функции, генератор кода должен сгенерировать функцию со всеми существующими аргументами.
В обратной связи включающие подсистемы вызова функций генератор кода генерирует функцию вместо встроенного кода для одной из подсистем. На основе внутреннего, отсортированного порядка подсистем генератор кода выбирает который подсистема сгенерировать функцию.
Если S-функция, Асинхронное Прерывание или блок Task Sync с опцией, набор SS_OPTION_FORCE_NONINLINED_FCNCALL
к TRUE
вызывает подсистему, генератор кода, генерируют функцию вместо встроенного кода для подсистемы. Библиотека блоков VxWorks® (vxlib1
), содержит пользовательские Асинхронные блоки Синхронизации Прерывания и Задачи. [1]
Управляйте генерацией функций для подсистем (Simulink Coder)
Сгенерируйте код подсистемы как отдельную функцию и файлы (Simulink Coder)
Сгенерируйте повторно используемый код от подсистем (Simulink Coder)
[1] VxWorks является зарегистрированной торговой маркой Ветра River® Systems, Inc.