STM32/STM8技术论坛
直播中

王军

8年用户 1858经验值
私信 关注
[问答]

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

我正在尝试开发一种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管理。在我的情况下哪种方式更好?哪种方式更容易处理并保证最佳性能?

回帖(3)

李平

2018-9-14 15:50:02
真的取决于协议规范。如果协议说你必须在收到abort命令后经过一段时间后停止,我会采取中断。
举报

刘丹

2018-9-14 15:50:33
这取决于您系统的其他规格。你可以使用中断来做你需要的事情; 使用RTOS会增加一些开销,我认为只有系统的通信接口是合理的。
举报

王浩

2018-9-14 15:51:37
你没有指定您的时序容差(例如抖动 - 它必须是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在大多数情况下几乎不会为最坏情况的执行时间提供储备)。在这个主题上有一本很棒的免费书籍时间触发嵌入式系统模式。此方法可以为你提供最低的抖动。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分