2009-08-31 3 views
1

Я пишу драйвер RS485 для встроенного проекта C.Предпочтительный способ уведомления верхних уровней о полученном сообщении

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

Каков предпочтительный способ сделать это?

С помощью прерываний? Запустить прерывание SW и прочитать сообщение из ISR?

Позвольте заявке опросить водителя периодически?

ответ

1

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

В случае приема, для многопоточного os, прерывание приема освобождает аппаратное обеспечение, очищает прерывание и сигнализирует поток для обслуживания полученных данных.

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

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

Если полученные данные пакетированы, вы можете искать границы пакетов в ISR и уведомлять обработчика только о прибытии полного пакета.

Смежные вопросы