exponenta event banner

Встроенные функции состояния в сгенерированном коде

Встроенный сгенерированный код для функций состояний

По умолчанию генератор кода использует внутреннюю эвристику для определения необходимости встраивания сгенерированного кода для функций состояния. Эвристика учитывает пороговое значение. По мере роста и уменьшения размера кода генерируемый код для функций состояния может быть непредсказуемым.

Если модель включает объекты Stateflow ® и у вас есть строгие требования к отслеживаемости между сгенерированным кодом и соответствующими функциями состояния, можно переопределить поведение по умолчанию. Использовать свойство stateFunction Inline Option явным образом принудить или предотвратить встраивание функций состояний.

Что происходит, когда вы вынуждаете инкриминировать

При принудительном встраивании для состояния генератор кода встраивает код для действий с состоянием в родительскую функцию. Родительская функция содержит код для выполнения действий состояния, внешних переходов и блок-схем. Он не включает код для пустых действий состояния.

Что происходит, когда вы предотвращаете встраивание

Если запретить встраивание для состояния, генератор кода создает эти статические функции для состояния foo.

ФункцияОписание

enter_atomic_foo

Отмечает foo активен и выполняет действия входа.

enter_internal_foo

Вызывает пути по умолчанию.

inner_default_foo

Выполняет блок-схемы, которые начинаются, когда внутренний переход и переход по умолчанию достигают одного и того же соединения внутри состояния.

Генератор кода создает эту функцию только тогда, когда блок-схема достаточно сложна, чтобы превысить пороговое значение.

В сгенерированном коде программное обеспечение Stateflow вызывает эту функцию из обоих enter_internal_foo и foo функции.

foo

Проверяет наличие допустимых внешних переходов и, если они отсутствуют, выполняет действия.

exit_atomic_foo

Выполняет действия выхода и помечает foo неактивно.

exit_internal_foo

Выполняет действия выхода дочерних подсостояний, а затем выходит foo.

Предположим, что следующая диаграмма находится в модели M.

Если запретить встраивание для состояния Aгенератор кода создает этот код.

static void M_inner_default_A(void);
static void M_exit_atomic_A(void);
static void M_A(void);
static void M_enter_atomic_A(void);
static void M_enter_internal_A(void);

Установка параметра «Встроенная функция состояния»

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

  1. Щелкните правой кнопкой мыши внутри состояния и в контекстном меню выберите «Свойства».

    Откроется диалоговое окно Свойства состояния (State properties).

  2. Для свойства Функция Встроенный параметр выберите одно из этих значений.

    СтоимостьПоведение
    InlineПринудительное вложение функций состояний в родительскую функцию, если функция не является частью рекурсии. Смотрите, что происходит, когда вы заставляете Inlining.
    FunctionПредотвращает встраивание функций состояний. Создает до шести статических функций для состояния. Смотрите, что происходит, когда вы предотвращаете встраивание.
    AutoИспользование внутренней эвристики для определения необходимости встраивания функций состояния.
  3. Нажмите кнопку «Применить».

Оптимальные методы управления функцией состояния

КомуЗадать для свойства Inline Option функции значение
Создание отдельной функции для каждого действия состояния и отдельной функции для каждого действия его подсостоянийFunction для состояния и каждого подсостояния
Создание отдельной функции для каждого действия состояния, но включение кода для связанного действия его подсостоянийFunction для государства и Inline для каждого подсостояния