我正在为嵌入式C项目编写RS485驱动程序。
驱动程序正在侦听传入消息,并应在收到完整消息并准备好读取时通知上层应用程序。
这样做的首选方法是什么?
使用中断?触发SW中断并从ISR中读取消息?
让应用程序定期轮询驱动程序?
答案 0 :(得分:1)
我通常在ISR中尽可能少地工作以保护接收的数据或清理传输的数据。这通常意味着从硬件缓冲区读取数据并进入循环缓冲区。
接收时,对于多线程操作系统,接收中断会清空硬件,清除中断并通知线程为接收的数据提供服务。
对于轮询环境,接收中断清空harwdware,清除中断,并设置一个标志以通知轮询循环它有什么要处理。
由于必须使用互斥机制保护ISR与轮询循环或处理线程之间共享的数据结构,因此可能发生中断。 通常这意味着在调整指针或计数时会短暂禁用中断。
如果接收的数据被打包,您可以在ISR中寻找数据包边界 并且仅在完整数据包到达时通知处理程序。