完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如题 晬賣乻hall not used in ISR (0) assert failed at rt_mb_recv:1499 我检查过,中断中没有用到rt_mb_recv,先不管这个。 是不是中断中不能用消息邮箱? |
|
相关推荐
9个回答
|
|
RTT的邮箱发送带挂起功能,所以不能够这样使用
|
|
|
|
如果我要在uart中断中通知外面收到了信息,那应该怎么处理
|
|
|
|
编程指南里是这样说的:
RT-Thread采用的邮箱通信机制有点类型传统意义上的管道,用于线程间通讯。它是线程,中断服 务,定时器向线程发送消息的有效手段。邮箱与线程对象等之间是相互独立的。线程,中断服务 和定时器都可以向邮箱发送消息,但是只有线程能够接收消息(因为当邮箱为空时,线程将有可 能被挂起)。 那到底能不能向邮箱发送消息?看代码应该是不能发消息,但这个编程指南的叙述怎么解释呢? 那要是我不能用这种通信机制,我是不是要用全局变量来通知线程?那不是回到原始社会了。。。。 又或者我进中断时不用 / enter interrupt / rt_interrupt_enter();? |
|
|
|
好像不是呢,从你的assert信息来看,是使用rt_mb_recv,这个。。。
|
|
|
|
我检查过没有在中断用rt_mb_recv,估计是rt_mb_send后,中断挂起,没有
系统调度到线程中去,刚好又到rt_mb_recv这里,结果就发出这个错误信息了,这种情况大概一天才出现一次,所以很不好查。 |
|
|
|
仔细看了一下Finsh的实现,finsh在使用uart1时设置的回调函数
这个回调函数是在uart1中断里调用的,而sem这种通信机制是没有
的,但是rt_sem_release应该也带挂起功能吧。 那是否说明我关闭RT_DEBUG,就可以在中断中用消息邮箱? 我现在已经不知道哪种通信机制可以在中断中可以用了。。。。 [s:163] |
|
|
|
|
|
|
|
程序是否跑飞我也不清楚,不排除这个可能。
现在我想搞清楚一下: 要是中断中用了rt_sem_release,而中断挂起(中断用到rt_interrupt_enter();了),这时调度到一个线程,线程运行到某一行要与另一线程通过消息邮箱通信,用到rt_mb_recv,而此时中断还没有(rt_interrupt_leave();),也就是说rt_interrupt_nest>0,那这时就是产生错误。 以上,是否可能会发生?要是有这可能,我不管在哪用rt_mb_recv都会很危险? 再有: rt_sem_release可以,rt_mb_send/rt_mq_send可以。rt_mb_send_wait不行 RTT的邮箱发送带挂起功能,所以不能够这样使用 大哥,你把我搞糊涂了…. |
|
|
|
你不要想左了,rt_interrupt_enter/leave和任务挂起没半毛钱的关系
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
AI模型部署边缘设备的奇妙之旅:边缘端设备的局域网视频流传输方案
1753 浏览 0 评论
1721 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
6912 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1930 浏览 0 评论
5641 浏览 0 评论
80214 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-3-7 05:25 , Processed in 0.794733 second(s), Total 57, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191