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