如何使用FreeRTOS或中断控制UART协议

2019-07-14 17:45发布

我正在尝试开发一种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管理。在我的情况下哪种方式更好?哪种方式更容易处理并保证最佳性能?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
huzp_bbs
1楼-- · 2019-07-14 20:11
 精彩回答 2  元偷偷看……
c1441424
2楼-- · 2019-07-14 21:40
你没有指定您的时序容差(例如抖动 - 它必须是1秒还是1毫秒)。如果它是1s,那么它可以很容易地完成“无论什么”(除非某些东西编码非常严重......)裸机和RTOS。RTOS真的有必要吗?你不仅仅使用RTOS来制作“更快”的东西,而且可以更轻松地管理许多并行和相互依赖的任务。
一些想法:
在RTOS任务内:加载UART数据寄存器,轮询发送完成标志,如果没有完成,则调用vTaskDelay(或RTOS中的其他延迟功能)。原始而且不保证时间安排。
RTOS任务加载TX缓冲区,启动UART TX中断,每个字节都有一个中断,任务等待由最后一个发送完成中断设置的标志或条件变量。每个字节都有一个中断。优先级较高的中断可能会影响时间。
RTOS任务加载TX缓冲区,配置DMA传输所有数据,任务等待由DMA传输完成中断设置的标志或条件变量。整个传输只有一个中断。很少的因素会影响时序(基本上只有其他DMA传输 - 这可以通过DMA优先级或循环DMA调度来处理)。
将一切设计为时间触发系统。这样可以以较低的峰值性能为代价提供100%可靠的时序(好的...... 99.99%)(即,您的快速CPU在大多数情况下几乎不会为最坏情况的执行时间提供储备)。在这个主题上有一本很棒的免费书籍时间触发嵌入式系统模式。此方法可以为你提供最低的抖动。

一周热门 更多>