#define LED1_TASK_Prio 5

 

用到的UCOSII函數
消息郵箱創建函數:
OS_EVENT *OSMboxCreate (void *msg)
請求消息郵箱函數:
void *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)
向郵箱發送消息函數:
INT8U OSMboxPost (OS_EVENT *pevent, void *msg)//向等待任務表中高優先級的任務發送消息
廣播郵箱消息函數:
INT8U OSMboxPostOpt (OS_EVENT *pevent, void *msg, INT8U opt)//向等待任務表中所有任務發送消息

 

按鍵掃描任務中,如果KEY0被按下,那么將向消息郵箱Str_Box發送消息1,
i=1;
OSMboxPost(Str_Box,&i); //發送消息1
如果KEY1被按下,那么將發送消息2,
i=2;
OSMboxPost(Str_Box,&i); //發送消息2
如果KEY2(WK_UP)被按下,將向所有等待任務表中所有任務發送消息3,
i=3;
OSMboxPostOpt(Str_Box,&i,OS_POST_OPT_BROADCAST); //向所有任務廣播消息3

 

實驗現象:

我們可以看到,如果我們按下KEY0,因為TaskLed1的優先級別高于TaskLed,所以當兩個任務都在等待的時候,只有TaskLed1可以收到消息1,所以兩個LED都不反轉。
如果按下KEY1,那么TaskLed1收到消息2,狀態反轉。
如果按下KEY2,那么TaskLed1和TaskLed都會收到消息,這個時候兩個LED狀態都會反轉。

OSMboxPostOpt()OSMboxPost()的區別在于前者是廣播消息,所有等待任務都可以收到,后者只會高優先級的任務收到。

下面給出消息郵箱的使用例程

[objc] view plain copy print?更多關于云服務器域名注冊,虛擬主機的問題,請訪問三五互聯官網:m.shinetop.cn

贊(0)
聲明:本網站發布的內容(圖片、視頻和文字)以原創、轉載和分享網絡內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。郵箱:3140448839@qq.com。本站原創內容未經允許不得轉載,或轉載時需注明出處:三五互聯知識庫 » Ucosii消息郵箱使用

登錄

找回密碼

注冊