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

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

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

Если ваша модель включает Stateflow® Объекты и у вас есть строгие требования к трассируемости между сгенерированным кодом и соответствующими функциями состояния, можно переопределить поведение по умолчанию. Используйте свойство состояний Function 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);

Как установить функцию состояния в строке опции

Чтобы задать свойство inlining функции для состояния:

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

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

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

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

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

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