Ucosii訊息郵箱使用

2021-08-03 21:01:39 字數 1572 閱讀 5280

//設定任務優先順序

#define led_task_prio       6

#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?

os_event *str_box;  

str_box = osmboxcreate ((void*)0);  //建立訊息郵箱

//任務1

//控制ds0的亮滅.

void taskled(void

void *pdata)  

ostimedlyhmsm(0,0,0,2

00);     

}  }  

//任務3

//按鍵檢測  

void taskkey(void

void *pdata)  

else

if(key==2)  

else

if(key==3)  

ostimedlyhmsm(0,0,0,2

0);         

}  }  

uCOS II郵箱和訊息佇列

1 ucos ii郵箱和訊息佇列 郵箱和訊息佇列是ucos ii中任務間的通訊機制,它可以使乙個任務或者中斷服務子程式向另乙個任務傳送以指標方式定義的變數。因具體的應用有所不同,每個指標指向的資料結構變數也有所不同。兩者都基於事件控制塊os event。與郵箱相比,訊息佇列在os event基礎上加...

uC OS II中的訊息郵箱

2007 12 24 14 25 05 uc os ii中的訊息郵箱 訊息郵箱是uc os ii中的另一種通訊機制,可以使乙個任務或者中斷服務子程式向另乙個任務傳送乙個指標型的變數。通常該指標指向乙個包含了 訊息 的特定資料結構。應用程式可以使用多少個郵箱,其最大數目是由os cfg.h檔案中的配置...

uC OS II 學習筆記 訊息郵箱實驗

通過led0任務函式實現times計數,通過led1任務函式實現tft液晶屏顯示times數值。已知 start task建立訊息郵箱 led0向訊息郵箱傳送訊息函式 led1請求訊息郵箱函式 變數定義 os event pmsgbox 定義事件控制塊 u32 times 類似於實參 u32 pst...