Прерывания, дребезг и событийная логика
Цель: Понять работу прерываний, отличие событийной обработки от постоянного опроса и способы подавления дребезга механических контактов.
3 часа короткая теория, самостоятельная практика, проверка результата и тест.
Суть темы
При постоянном опросе программа регулярно проверяет состояние входа. Прерывание работает иначе: аппаратное событие сообщает процессору, что требуется обработка. Это удобно для таймеров, последовательных интерфейсов и внешних сигналов, но обработчик прерывания должен быть коротким и предсказуемым.
Механическая кнопка при одном нажатии обычно создаёт не один идеальный фронт, а серию быстрых переходов. Если реагировать на каждый из них, программа зарегистрирует несколько нажатий. Подавление дребезга выполняют аппаратно, программно или совместно.
Ключевые связи и параметры
В обработчике прерывания обычно фиксируют событие, сохраняют минимально необходимые данные и очищают источник прерывания. Длительные вычисления переносят в основной цикл программы. Если события приходят быстрее, чем процессор успевает их обслуживать, часть данных может быть потеряна.
Для программного подавления дребезга удобно использовать таймер: после первого изменения входа ждут предусмотренный интервал и подтверждают, что новое состояние стало устойчивым. Длительная программная задержка внутри обработчика прерывания блокирует другие события и является плохим решением.
Разбор примера
Осциллограф показывает, что кнопка за несколько миллисекунд создаёт десяток переходов. Простой счётчик в обработчике зарегистрирует много нажатий. Если после первого фронта запустить таймер и принять состояние только после стабилизации, получится одно событие.
При приёме данных последовательного интерфейса обработчик может помещать каждый байт в буфер, а разбор сообщения выполнять позже в основном коде.
Практическая работа и проверка
- Запишите форму сигнала механической кнопки осциллографом.
- Подсчитайте количество событий без фильтрации.
- Реализуйте подавление дребезга на таймере.
- Проверьте, не мешает ли обработчик другим прерываниям.
- Сравните реакцию постоянного опроса и событийной обработки.
Типичные ошибки и диагностика
- Считать механический контакт идеальным одиночным фронтом.
- Выполнять длительную задержку внутри обработчика прерывания.
- Не сбрасывать флаг источника прерывания.
- Изменять общие данные из прерывания и основного кода без учёта одновременного доступа.
Связь с реальным устройством
Событийная система надёжна, когда физические входы превращены в устойчивые цифровые события, обработчики коротки, а частота событий не превышает возможности процессора.
Что нужно запомнить
- Прерывание позволяет реагировать на событие без постоянного опроса.
- Обработчик прерывания должен быть коротким.
- Дребезг — физическое свойство механического контакта.
- Программное подавление дребезга удобно строить на таймере.
- Частые события могут перегрузить систему даже при правильном коде.