你的位置:首页 > 操作系统

[操作系统]OSMboxPend() 等待消息时遇到的问题


首先根据书中讲解的实例代码(标准实例来源于UCOS ii经典教程 邵贝贝)

 1 OS_EVENT *CommMbox; 2  3 void CommTask(void *pdata) 4 { 5    INT8U err; 6   void *msg; 7  8   pdata = pdata; //防止编译器报错 9 10   for(;;)11    {12     msg = OSMboxPend(CommMbox, 10, &err)13 14     if(OS_ERR_NONE == err)15      {16        /***正确接受代码***/17      }18      else19      {20        /***在指定时间内没有接收到消息代码处理***/21      } 22     OSTimeDly(10);23    }   24 }

并且在另一个任务中进行消息发送,如下代码

 1 void PostMbox(void *pdata) 2 { 3   INT8U err; 4  5   for(;;) 6   { 7  8    if(/*条件成立*/) 9     {10      err = OSMboxPost(CommMbox, &variable);11      if(OS_ERR_NONE == err)12      {13       printf("post a message\r\n");14      }     15     }16   OSTimeDly(10);17   }18 19 }

无论是断点调试,还是从输出的调试信息中都可以确定每次都有消息发送,但是在OSMboxPend中始终没有接收到消息导致err一直等于OS_TIMEOUT而无法进行正确消息处理

但是只要有消息发送出来,通过调试断点可以看到void CommTask(void *pdata)中的*msg的值都是改变了的(并且是我们同过消息发出的值)。

21:18:14  2016-08-25