Избегайте нежелательной рекурсии в графике

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

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

Вызовы рекурсивной функции

Предположим, что у вас есть функции с именем fG, и h в графике. Эти функции могут быть любой комбинацией графических функций, функций таблицы истинности, функций MATLAB® или функций Simulink®.

Чтобы избежать рекурсивного поведения, не делайте:

  • Имейте f вызов g вызов h вызов f.

  • Имейте fG, или h вызов себя.

Неориентированные локальные широковещательные сообщения события

Примеры состояний активности с неориентированными локальными широковещательными сообщениями события включают:

  • entry: send(E1), где E1 локальное событие в графике.

  • exit: E2, где E2 локальное событие в графике.

Чтобы избежать рекурсивного поведения, замените неориентированные широковещательные сообщения события на направленные широковещательные сообщения события при помощи синтаксиса

send(event,state)
где event локальное событие в графике и state целевое состояние.

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

  • Если локальная широковещательная передача события происходит в переходе, гарантируйте что:

    • Целевое состояние не является предком перехода в иерархии графика.

    • Переход не соединяется с целевым состоянием.

В процессе моделирования графики Stateflow® могут обнаружить неориентированные локальные широковещательные сообщения события. Чтобы управлять уровнем диагностического действия, откройте диалоговое окно Model Configuration Parameters. В Diagnostics> панель Stateflow, для диагностики Undirected event broadcasts, можно выбрать noneПредупреждение, или error. Настройкой по умолчанию является warning. Для получения дополнительной информации смотрите широковещательные сообщения события Undirected (Simulink).

Смотрите также

Похожие темы