Прерывания в embedded-системах воспринимаются как благо: быстрый отклик, экономия ресурсов, «реакция по событию».
Но на практике именно прерывания часто становятся причиной плавающих багов, редких зависаний и поведения «раз в неделю, но навсегда». Разберёмся, почему так происходит. Основная ошибка — воспринимать обработчик прерывания как «обычную функцию, только быстрее».
На самом деле ISR — это код, который: Чем больше логики внутри ISR — тем выше риск нестабильности. Накопление прерываний и скрытая перегрузка Если источник прерывания срабатывает быстрее, чем ISR успевает отработать: Система может не падать, но: Особенно часто это встречается при: Неправильно расставленные приоритеты прерываний приводят к: Типичная ошибка — давать «высокий приоритет всему важному».
В итоге важным оказывается слишком много. ISR и основной код почти всегда работают с общими ресурсами: Без строгой синхронизации это приводит к: Особенно опасны: Вложенные прерывания выглядят удобно, но: Переполнение стека