Обработчик прерывания (ISR)
Функция, на которую переходит процессор при срабатывании прерывания — код, работающий на одолженном времени, посреди чего-то другого.
Её адрес берётся из таблицы векторов прерываний. На Cortex-M ISR — обычная функция на C, поскольку аппаратура сама сохраняет регистры вызывающего кода в кадре исключения; на старых архитектурах требовался ассемблерный пролог или специфичное для компилятора ключевое слово __interrupt.
Основные правила универсальны: быть короткой, никогда не блокироваться, сбрасывать флаг прерывания до возврата (иначе оно тут же сработает снова) и обмениваться данными с основной программой через volatile-переменные или критическую секцию. Тяжёлую работу передают задаче — см. отложенную обработку прерываний. В FreeRTOS есть отдельные вызовы …FromISR() именно потому, что обычный API может попытаться заснуть, а ISR этого делать нельзя ни при каких обстоятельствах.