Предпочтительный способ уведомления верхних уровней о полученном сообщении - PullRequest
1 голос
/ 31 августа 2009

Я пишу драйвер RS485 для встроенного C-проекта.

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

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

Используя прерывания? Запустить прерывание SW и прочитать сообщение из ISR?

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

1 Ответ

1 голос
/ 31 августа 2009

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

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

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

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

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

...