完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在尝试开发一种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个回答
|
|
真的取决于协议规范。如果协议说你必须在收到abort命令后经过一段时间后停止,我会采取中断。
|
|
|
|
这取决于您系统的其他规格。你可以使用中断来做你需要的事情; 使用RTOS会增加一些开销,我认为只有系统的通信接口是合理的。
|
|
|
|
你没有指定您的时序容差(例如抖动 - 它必须是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在大多数情况下几乎不会为最坏情况的执行时间提供储备)。在这个主题上有一本很棒的免费书籍时间触发嵌入式系统模式。此方法可以为你提供最低的抖动。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1373 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1303 浏览 3 评论
2616 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1450 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1882 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-2 10:20 , Processed in 0.744295 second(s), Total 47, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号