通知上层接收消息的优选方法

时间:2009-08-31 12:17:56

标签: embedded serial-port rs485

我正在为嵌入式C项目编写RS485驱动程序。

驱动程序正在侦听传入消息,并应在收到完整消息并准备好读取时通知上层应用程序。

这样做的首选方法是什么?

使用中断?触发SW中断并从ISR中读取消息?

让应用程序定期轮询驱动程序?

1 个答案:

答案 0 :(得分:1)

我通常在ISR中尽可能少地工作以保护接收的数据或清理传输的数据。这通常意味着从硬件缓冲区读取数据并进入循环缓冲区。

接收时,对于多线程操作系统,接收中断会清空硬件,清除中断并通知线程为接收的数据提供服务。

对于轮询环境,接收中断清空harwdware,清除中断,并设置一个标志以通知轮询循环它有什么要处理。

由于必须使用互斥机制保护ISR与轮询循环或处理线程之间共享的数据结构,因此可能发生中断。 通常这意味着在调整指针或计数时会短暂禁用中断。

如果接收的数据被打包,您可以在ISR中寻找数据包边界 并且仅在完整数据包到达时通知处理程序。