5 Nano 内核FinSH 的 list_event 查询问题

发布于 2020-08-26 09:56:45

在线程中阻塞等待事件,但是使用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)
            {
              /*事件处理*/
            }
       }
}

79479863642c247115fcb8f96c8abe52.jpg
看了list_event的源代码,也没看明白,一头雾水。
————————————————————————————————————————————————————————————————
好像找到问题了,BD_event这个事件,代码里初始化了两次,专门测了一下,两次返回的都是OK。注释掉一个就可以正常查询了。

初始化两次的测试
ae23a522e91134e6953f0544e4fde64.png

[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.

改成初始化一次,就好了。

56a4b8b29e65ce8bd2c8fe59090ce4d1.jpg

谢谢让我贴更多代码的大佬,贴代码的时候,要再次详细的看自己的代码,就发现问题了,哈哈哈。这个算是Nano的系统问题吧,第二次初始化应该返回错误。

查看更多

关注者
0
被浏览
349
1 个回答
qq_还没想好
qq_还没想好 2020-08-26

应该是哪里地方有问题,导致IPC 链表异常了。建议贴出更多代码。看能不能发现啥问题

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览