完善资料让更多小伙伴认识你,还能领取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。 下方的代码中:
|
|
|
|
只有小组成员才能发言,加入小组>>
156个成员聚集在这个小组
加入小组【Vision Board创客营连载体验】基于RA8D1-Vision Board的自动路径规划小车
900 浏览 0 评论
【Vision Board创客营连载体验】基于Vision Board的垃圾分类
1300 浏览 0 评论
【Vision Board创客营连载体验】使用 Vision Board 做一个 UVC Camera
930 浏览 0 评论
【Vision Board创客营连载体验】TinyMaix进行手写数字识别
1196 浏览 0 评论
【Vision Board创客营连载体验】RA8D1-Vision Board使用7寸屏设置为RGB666大端模式模式成功显示摄像头图案
1203 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 09:16 , Processed in 0.622674 second(s), Total 82, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号