Сложные конечные автоматы
ЗАЧЕМ ЭТО НУЖНО? 🎯
Суть проблемы: простые системы имеют 2-3 состояния, но реальные устройства требуют сложных многоуровневых поведений с множеством переходов!
Ключевые концепции:
- Иерархические автоматы - состояния внутри состояний
- Приоритеты событий - какие события прерывают текущие процессы
- Временные ограничения - тайминги в разных режимах работы
- Модальность - разные “миры” поведения системы
Олимпиадная ценность: обучение проектированию сложных систем управления, как в реальных олимпиадных заданиях с многорежимной работой!
КАК ИЗУЧАЕМ? 🚀
Без кода - только логика:
Простой автомат: [КРАСНЫЙ] → [ЗЕЛЕНЫЙ] → [ЖЕЛТЫЙ]
Сложный автомат: [НОРМАЛЬНЫЙ_РЕЖИМ] → [КРАСНЫЙ] → [АВАРИЙНЫЙ_РЕЖИМ] → [МИГАЮЩИЙ]
Приоритеты:
Экстренная кнопка > Смена режима > Нормальная работа
Методика обучения:
- “Слои состояний” - основные режимы и подсостояния внутри них
- “Матрица переходов” - таблица “из какого состояния куда можно перейти”
- “Таймеры и события” - что запускается по времени, что по внешним сигналам
- “Восстановление состояния” - как вернуться к прерванному процессу
Критические концепции:
// Иерархическая структура состояний
enum MainMode { NORMAL, NIGHT, EMERGENCY, PEAK };
enum TrafficState { RED, RED_YELLOW, GREEN, YELLOW };
struct SystemState {
MainMode mainMode;
TrafficState trafficState;
unsigned long stateStartTime;
bool emergencyActive;
};
