在线程中阻塞等待事件,但是使用list_event查询当前事件的列表,控制台就不停的吐出事件
/* 事件控制块 BD事件*/
struct rt_event BD_event;
//初始化事件
void BD_IPC_init(void)
{
rt_err_t result;
/* 初始化BD 事件对象 */
result = rt_event_init(&BD_event, "BD_event", RT_IPC_FLAG_FIFO);
if(result != RT_EOK)
{
rt_kprintf("init event failed.\n");
// return -1;
}
}
static void serial_select_thread_entry(void* parameter)
{
rt_uint32_t e;
log_info("serial_select_thread_entry\r\n");
while(1)
{
/* 接收完后清除事件标志 */
rt_event_recv(&BD_event, UART2_RECV_EVENT_FLAG |
UART3_RECV_EVENT_FLAG,
RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR,
RT_WAITING_FOREVER, &e) ;
log_info("serial_select_thread_entry:\r\n");
if(e & UART2_RECV_EVENT_FLAG)
{
/*事件处理*/
}
}
}
,
看了list_event的源代码,也没看明白,一头雾水。
————————————————————————————————————————————————————————————————
好像找到问题了,BD_event这个事件,代码里初始化了两次,专门测了一下,两次返回的都是OK。注释掉一个就可以正常查询了。
初始化两次的测试
[12:14:42.435]收←◆
\ | /
- RT - Thread Operating System
/ | \ 3.1.3 build Aug 24 2020
2006 - 2019 Copyright by rt-thread team
111111__________________result 0.
222222__________________result 0.
改成初始化一次,就好了。
谢谢让我贴更多代码的大佬,贴代码的时候,要再次详细的看自己的代码,就发现问题了,哈哈哈。这个算是Nano的系统问题吧,第二次初始化应该返回错误。
谢谢,已经解决啦。
是啥问题呀?咋解决的