首先根据书中讲解的实例代码(标准实例来源于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 else 19 { 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
时间: 2024-12-28 12:12:27