我在解码通过微控制器的UART发送的数据包时遇到问题(固件必须是裸机,不支持RTOS)。数据包的长度为32个字节,每10毫秒发送一次(连续不断,没有任何停止)。
我需要在ISR中进行非常少的处理(以使ISR足够短),并在main()循环中进行延迟处理。我想到两种方法- 1.使用中断安全的环形缓冲区,ISR写入缓冲区,并从中读取main()循环。头和尾指针被假定为我的体系结构的原子类型,以确保缓冲区是中断安全的。请参阅示例实现here。
UART能够产生RX FIFO非空中断。还提供DMA支持。
答案 0 :(得分:2)
双缓冲区只是一种特殊的环形缓冲区,只有两个在生产者和使用者之间交换的插槽。如果您的处理时间相差不大,那么就足够了。如果输入速率或处理时间不同,环形缓冲区可能会有所帮助,但是当处理无法跟上时,您很可能需要一些流量控制来降低输入速率。