完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
今天看了CAN发送的底层配置发现,rtt的CAN设备发送好像只能选择DMA或者中断的方式进行发送,这种设定是为什么呢?
我明明可以选择一个定时器,时间到了之后直接手动发送就完成了,配置成中断发送模式涉及线程切换势必要浪费不必要的时间,使用DMA又会白白浪费一个DAM通道,这种设计是处于什么目的呢? 补充: 一下是CAN发送的底层,位置在工程->rt_thread->drivers->can->can.c文件的低460行。 rt_can_write()函数,在这个函数中,它会先进行一个判断: if ((dev->open_flag & RT_DEVICE_FLAG_INT_TX) && (dev->ref_count > 0)) 所以看起来必须配置RT_DEVICE_FLAG_INT_TX能执行一个CAN正常的发送。 |
|
相关推荐
1个回答
|
|
|
好的,我们来分析一下为什么在RT-Thread(以及绝大多数类似的嵌入式RTOS/HAL设计中)的CAN设备驱动默认且强烈推荐使用中断或DMA方式进行发送,而不是你设想的定时器轮询方式。这背后的原因涉及到实时性、效率、资源利用和硬件特性等多方面。 你的观察(
针对你的补充点( 驱动代码中那个检查逻辑正是这种设计理念的体现:
结论与建议:
总而言之,RT-Thread CAN驱动优先使用中断或DMA发送是经过深思熟虑的设计,是为了在实时性、效率和资源利用三者之间取得最佳平衡。你所设想的定时器轮询方式在理论上有实现的可能,但在实践中面对实时系统的要求,其固有的延迟和CPU消耗缺点使它成为不可取甚至不合格的替代方案,尤其是在CAN这种对时效性要求极高的设备上,不建议尝试推翻这套默认的设计。使用中断才是正道、官方最佳实践。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
184个成员聚集在这个小组
加入小组rtstudio是否可像keil加载ini解决虚拟串口与mcu串口通讯?
1220 浏览 0 评论
【Vision Board创客营连载体验】基于RA8D1-Vision Board的自动路径规划小车
1780 浏览 1 评论
【Vision Board创客营连载体验】基于Vision Board的垃圾分类
2160 浏览 0 评论
【Vision Board创客营连载体验】使用 Vision Board 做一个 UVC Camera
1786 浏览 0 评论
【Vision Board创客营连载体验】TinyMaix进行手写数字识别
2012 浏览 0 评论
1477浏览 5评论
在RT-Thread Studio中新建的stm32f407-atk-explorer工程运行qemu失败,是什么原因引起的?
1778浏览 3评论
为什么rt_device_read()只能读取到两个字节数据?
374浏览 3评论
连得上热点,但是ping baidu.com出现timeout,请问跟什么有关?
431浏览 3评论
443浏览 2评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-4 14:56 , Processed in 0.838688 second(s), Total 79, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
6356
