首先根據書中講解的實例代碼(標準實例來源於UCOS ii經典教程 邵貝貝) 並且在另一個任務中進行消息發送,如下代碼 無論是斷點調試,還是從輸出的調試信息中都可以確定每次都有消息發送,但是在OSMboxPend中始終沒有接收到消息導致err一直等於OS_TIMEOUT而無法進行正確消息處理 但是只要 ...
首先根據書中講解的實例代碼(標準實例來源於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