Курс 10 • Урок 5 из 8 • 3 часа учебной нагрузки

Прерывания, дребезг и событийная логика

Цель: Понять работу прерываний, отличие событийной обработки от постоянного опроса и способы подавления дребезга механических контактов.

3 часа короткая теория, самостоятельная практика, проверка результата и тест.

Суть темы

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

Механическая кнопка при одном нажатии обычно создаёт не один идеальный фронт, а серию быстрых переходов. Если реагировать на каждый из них, программа зарегистрирует несколько нажатий. Подавление дребезга выполняют аппаратно, программно или совместно.

Ключевые связи и параметры

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

Для программного подавления дребезга удобно использовать таймер: после первого изменения входа ждут предусмотренный интервал и подтверждают, что новое состояние стало устойчивым. Длительная программная задержка внутри обработчика прерывания блокирует другие события и является плохим решением.

Разбор примера

Осциллограф показывает, что кнопка за несколько миллисекунд создаёт десяток переходов. Простой счётчик в обработчике зарегистрирует много нажатий. Если после первого фронта запустить таймер и принять состояние только после стабилизации, получится одно событие.

При приёме данных последовательного интерфейса обработчик может помещать каждый байт в буфер, а разбор сообщения выполнять позже в основном коде.

Практическая работа и проверка

  1. Запишите форму сигнала механической кнопки осциллографом.
  2. Подсчитайте количество событий без фильтрации.
  3. Реализуйте подавление дребезга на таймере.
  4. Проверьте, не мешает ли обработчик другим прерываниям.
  5. Сравните реакцию постоянного опроса и событийной обработки.

Типичные ошибки и диагностика

  • Считать механический контакт идеальным одиночным фронтом.
  • Выполнять длительную задержку внутри обработчика прерывания.
  • Не сбрасывать флаг источника прерывания.
  • Изменять общие данные из прерывания и основного кода без учёта одновременного доступа.

Связь с реальным устройством

Событийная система надёжна, когда физические входы превращены в устойчивые цифровые события, обработчики коротки, а частота событий не превышает возможности процессора.

Что нужно запомнить

  • Прерывание позволяет реагировать на событие без постоянного опроса.
  • Обработчик прерывания должен быть коротким.
  • Дребезг — физическое свойство механического контакта.
  • Программное подавление дребезга удобно строить на таймере.
  • Частые события могут перегрузить систему даже при правильном коде.
Проверка знаний

Вопросы по уроку

Нужно 75%
Загрузка вопросов…