По умолчанию генератор кода использует внутренний эвристик, чтобы определить, вводить ли сгенерированный код в строку для функций состояния. Эвристический принимает во фактор встроенный порог. Когда код растет и уменьшается в размере, сгенерированный код для функций состояния может быть непредсказуемым.
Если ваша модель включает Stateflow® Объекты и у вас есть строгие требования к трассируемости между сгенерированным кодом и соответствующими функциями состояния, можно переопределить поведение по умолчанию. Используйте свойство состояний Function Inline Option
явное усиление или предотвращение встраивания функций состояния.
Если вы принудительно встраиваете состояние, генератор кода встраивает код для состояний активности в родительскую функцию. Родительская функция содержит код для выполнения состояний активности, внешних переходов и графиков потока. Он не содержит код для пустых состояний активности.
Если вы препятствуете встраиванию состояния, генератор кода производит эти статические функции для состояния foo.
Функция | Описание |
---|---|
| Маркеры |
| Вызывает пути по умолчанию. |
| Выполняет графики потока, которые начинаются, когда внутренний переход и переход по умолчанию достигают одного и того же соединения внутри состояния. Генератор кода производит эту функцию только, когда график потока является достаточно комплексным, чтобы превысить порог встраивания. В сгенерированном коде программное обеспечение Stateflow вызывает эту функцию из обоих |
| Проверяет допустимые внешние переходы и, если их нет, выполняет во время действий. |
| Выполняет выходные действия и метки |
| Выполняет выходные действия дочерних подсостояний, а затем выходит из |
Предположим, что следующий график находится в модели 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 функции для состояния:
Щелкните правой кнопкой мыши в состоянии и в контекстном меню выберите Properties.
Откроется диалоговое окно Свойств состояний.
Для Function Inline Option свойств выберите одно из следующих значений.
Значение | Поведение |
---|---|
Inline | Принудительно встраивает функции состояния в родительскую функцию, пока функция не является частью рекурсии. Посмотрите, что происходит, когда вы заставляете встраиваться. |
Function | Предотвращает встраивание функций состояния. Генерирует до шести статических функций для состояния. Посмотрите, что происходит, когда вы предотвращаете встраивание. |
Auto | Использует внутреннюю эвристику, чтобы определить, вводить или нет функции состояния. |
Нажмите Apply.
Кому | Установите свойство Function Inline Option на |
---|---|
Сгенерируйте отдельную функцию для каждого действия состояния и отдельную функцию для каждого действия его подсостояний | Function для состояния и каждого подсостояния |
Сгенерируйте отдельную функцию для каждого действия состояния, но включите код для связанного действия его подсостояний | Function для состояния и Inline для каждого подсостояния |