Я обычно выполняю в ISR как можно меньше работы для защиты полученных данных или очистки передаваемых данных. Обычно это означает чтение данных из аппаратных буферов в кольцевой буфер.
При получении для многопоточной ОС прерывание приема очищает аппаратное обеспечение, очищает прерывание и сигнализирует потоку для обслуживания полученных данных.
Для среды опроса принимающее прерывание очищает аппаратное обеспечение, очищает прерывание и устанавливает флаг, чтобы уведомить цикл опроса, что ему нужно что-то обрабатывать.
Поскольку прерывания могут возникать в любое время, структуры данных, совместно используемые ISR и циклом опроса или потоком обработки, должны быть защищены с использованием механизма взаимного исключения.
Часто это будет означать кратковременное отключение прерываний во время настройки указателя или счетчика.
Если полученные данные пакетированы, вы можете искать границы пакетов в ISR
и уведомлять обработчик только при получении полного пакета.