我正在尝试开发一种UART协议,以允许两块板Master_Board和Slave_Board之间的通信。Master_Board应通过UART向Slave_Board发送命令,后者应回答。事情是命令具有不同的优先级,并且一些命令需要及时执行。例如,如果Master_board向Analysis_Board发送“GET_VALUE”,后者将向Master_board发送值20秒。如果在接收数据时发生了不良事件,Master_board应向分析板发送“ABORT”。即使未达到20秒,后者也应停止发送值。我认为有两种方法可以做到这一点。实现UART协议由中断或RTOS管理。在我的情况下哪种方式更好?哪种方式更容易处理并保证最佳性能?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一些想法:
在RTOS任务内:加载UART数据寄存器,轮询发送完成标志,如果没有完成,则调用vTaskDelay(或RTOS中的其他延迟功能)。原始而且不保证时间安排。
RTOS任务加载TX缓冲区,启动UART TX中断,每个字节都有一个中断,任务等待由最后一个发送完成中断设置的标志或条件变量。每个字节都有一个中断。优先级较高的中断可能会影响时间。
RTOS任务加载TX缓冲区,配置DMA传输所有数据,任务等待由DMA传输完成中断设置的标志或条件变量。整个传输只有一个中断。很少的因素会影响时序(基本上只有其他DMA传输 - 这可以通过DMA优先级或循环DMA调度来处理)。
将一切设计为时间触发系统。这样可以以较低的峰值性能为代价提供100%可靠的时序(好的...... 99.99%)(即,您的快速CPU在大多数情况下几乎不会为最坏情况的执行时间提供储备)。在这个主题上有一本很棒的免费书籍时间触发嵌入式系统模式。此方法可以为你提供最低的抖动。
一周热门 更多>