完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
请教两个问题: 1.假如我初始化线程的时候是采用收发中断的方式打开CAN设备,我bsp_can初始化硬件接口的时候没有使能收发中断,这时候CAN还会中断收发嘛?还是说两个都得使能中断? 2.我的can设备应用场景是分时复用的,1s切换四次通道,250ms一个通道,采用问答形式,主机广播,从机接收到指令上传数据。然后使能了一个软件定时器250ms调用一次,切换通道,并释放信号量。广播线程接收信号量,广播上传数据指令。现在我应用中出现的问题是每个通道十个CAN设备,有时候会接收不到最小的id数据。想弄清楚这个是怎么回事。正常来说中断应该是不会受线程的优先级影响的。我有数据过来,是会直接调用can rx 函数的,即使设置的优先级比较低。我看官方的文档,也是can rx是一直被阻塞的,有中断发生会直接执行的。还是说有可能是我软件定时器释放完信号量,广播线程的优先级设置低了,等待一段时间后才执行,等从机上传数据时,我软件定时器已经切换通道了,导致最小的id数据没有接受到? 哪位大神能给指点下? |
|
相关推荐
3个回答
|
|
以 rtt 的做法,一般是硬件驱动注册设备的时候,先给定几种设备打开的方式 flag。然后 rt_device_open 的时候,如果有和注册的 flag 不一样的,可能会出现错误,导致打开失败。因此,初始化硬件和应用层打开设备都需要指明需要中断。
你的意思是,每个通道中的十个设备,经常有一个设备的数据收不到?现在你能确定轮询这十个设备需要用多长时间吗?会不会是 250ms 的时间不足? |
|
|
|
感觉是时间不足,可能我的广播线程的优先级有点低,切换通道时可能会广播不及时
|
|
|
|
跟优先级大小关系不大,总不能其它高优先级总在霸占着 cpu 吧——不过也有可能,比如串口的 poll 模式发送就是霸占 cpu 的。
你可能得找找哪儿的操作在霸占 cpu了 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
819 浏览 0 评论
5783 浏览 0 评论
如何使用python调起UDE STK5.2进行下载自动化下载呢?
2749 浏览 0 评论
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束
3088 浏览 0 评论
获奖公布!2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
32873 浏览 11 评论
73438 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 20:26 , Processed in 0.726604 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号