完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
rt_event_recv无故返回
首先建立了 static 的事件集 _evt 做了一个工作线程,会依照收到的事件在休止和运行两个状态之间往复。另外有控制线程发出事件。 工作线程在休止状态是这样等待事件: err = rt_event_recv(_evt,EVT_RUN, RT_EVENT_FLAG_OR|RT_EVENT_FLAG_CLEAR, RT_WAITING_FOREVER,&flags); EVT_RUN 由控制线程经函数发出。等到了,一轮作业后,发出回馈事件 EVT_2 给控制线程,进入运行状态。在运行状态是这样等待事件: err = rt_event_recv(_evt,EVT_3|EVT_4|EVT_STOP, RT_EVENT_FLAG_OR|RT_EVENT_FLAG_CLEAR, timeout,&flags); 等待同时做其他工作。EVT_3 和 EVT_4 由中断发出但不改变状态。接收到控制线程发出 EVT_STOP 后,一轮工作后会清除 EVT_2 并发出 EVT_6 给控制线程作为回馈: rt_event_recv(_evt,EVT_2,RT_EVENT_FLAG_OR|RT_EVENT_FLAG_CLEAR,0,RT_NULL); rt_event_send(_evt,EVT_6); 之后会回到休止状态,用上面的方式等待 EVT_RUN. 但是却发觉 rt_event_recv() 在没有 EVT_RUN 的情况下返回了。 曾经把等待和清除事件分开来做,看清除前的状态,发觉 err 是 RT_EOK,但 _evt.set 却是 0x0。 RT-Thread版本是 4.1.1,编译是用 ENV 1.3.5 的 gcc,有什么情况会出现这种现象?有没有办法绕过去?谢谢。 |
|
相关推荐
1个回答
|
|
我这边按照你的流程写了个简单demo,运行4.1.1,没有发现有什么问题。
按照你的说明,我理解的EVT2是对Running的ACK;EVT6是对Stop的ACK。 下方的代码中:
|
|
|
|
只有小组成员才能发言,加入小组>>
151个成员聚集在这个小组
加入小组【Vision Board创客营连载体验】基于RA8D1-Vision Board的自动路径规划小车
862 浏览 0 评论
【Vision Board创客营连载体验】基于Vision Board的垃圾分类
1181 浏览 0 评论
【Vision Board创客营连载体验】使用 Vision Board 做一个 UVC Camera
842 浏览 0 评论
【Vision Board创客营连载体验】TinyMaix进行手写数字识别
1147 浏览 0 评论
【Vision Board创客营连载体验】RA8D1-Vision Board使用7寸屏设置为RGB666大端模式模式成功显示摄像头图案
1136 浏览 0 评论
STM32F407ZGT6 spi flash片选引脚无法被拉低的原因?怎么解决?
1185浏览 2评论
移植RT-THREAD在stm32开发板上,使用rt_kprintf不能正常打印的原因是什么?怎么解决?
506浏览 2评论
stm32f103zet用rtthread studio生成带finsh的项目程序,串口输入help没有反应是为什么?
511浏览 2评论
rtthread studio已经成功编写了外部flash下载算法,程序也能下载进去但是不能进行调试怎么办?
430浏览 2评论
rt-thread 4.1.1的pin的实际引脚编号和内核引脚编号的对应关系在哪个文件里面能找到?
427浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 08:26 , Processed in 0.694640 second(s), Total 83, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号