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

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

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

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

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

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

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

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

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

enter_atomic_ foo

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

enter_internal_ foo

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

inner_default_ foo

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

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

В сгенерированном коде программное обеспечение Stateflow вызывает эту функцию и от foo enter_internal_ и от функций 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 для каждого подсостояния