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

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

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

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

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

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

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

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

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

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. Щелкните правой кнопкой в состоянии и, из контекстного меню, выберите Properties.

    Диалоговое окно Свойств состояний открывается.

  2. Для свойства Function Inline Option выберите одно из этих значений.

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

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

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