完善资料让更多小伙伴认识你,还能领取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。 下方的代码中:
|
|
|
|
只有小组成员才能发言,加入小组>>
136个成员聚集在这个小组
加入小组142 浏览 0 评论
【Vision Board创客营连载体验】RA8D1 Vision Board 实现 FAL 同时调用片上以及外挂 Flash
530 浏览 1 评论
【Vision Board创客营连载体验】RA8D1 Vision Board初体验
411 浏览 0 评论
【Vision Board创客营连载体验】RA8D1 Vision Board上的SPI实践
421 浏览 0 评论
【Vision Board创客营连载体验】RT-Thread 之wifi连网
858 浏览 0 评论
STM32F407ZGT6 spi flash片选引脚无法被拉低的原因?怎么解决?
760浏览 2评论
移植RT-THREAD在stm32开发板上,使用rt_kprintf不能正常打印的原因是什么?怎么解决?
205浏览 2评论
stm32f103zet用rtthread studio生成带finsh的项目程序,串口输入help没有反应是为什么?
232浏览 2评论
rtthread studio已经成功编写了外部flash下载算法,程序也能下载进去但是不能进行调试怎么办?
220浏览 2评论
rt-thread 4.1.1的pin的实际引脚编号和内核引脚编号的对应关系在哪个文件里面能找到?
224浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-28 23:26 , Processed in 0.518917 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号