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