uCOS II郵箱和訊息佇列

2021-05-04 15:54:55 字數 1649 閱讀 2748

1、 ucos-ii郵箱和訊息佇列

郵箱和訊息佇列是ucos-ii中任務間的通訊機制,它可以使乙個任務或者中斷服務子程式向另乙個任務傳送以指標方式定義的變數。因具體的應用有所不同,每個指標指向的資料結構變數也有所不同。兩者都基於事件控制塊os_event。與郵箱相比,訊息佇列在os_event基礎上加了個迴圈佇列,可以存放多個訊息,而郵箱只能存放乙個訊息。訊息佇列可以看成是多個郵箱的組合。因此,兩者除了建立時有些差別外,其他的操作都很相似。

1.1、 ucos-ii郵箱

在事件控制塊os_event中有乙個域oseventptr,這個域是乙個用來存放訊息的指標。由於郵箱是由作業系統維護的,因此使用指標可以避免訊息的複製,提供作業系統效率。ucos-ii中對郵箱有五種操作:osmboxcreate(),osmboxpend() , osmboxpost(),osmboxaccept()和osmboxquery()。其中osmboxaccept()是無等待的接受乙個訊息。在建立乙個郵箱時,一般初始化為空郵箱,但是也可以讓郵箱一開始就包含一條訊息。如果該郵箱用於通知某個事件的發生,那麼就應該初始化為空郵箱;如果用於共享某些資源,那麼就應該讓其包含一條訊息。

1.2、 ucos-ii訊息佇列

與郵箱不同,當事件控制塊os_event被用於訊息佇列時,域oseventptr指向乙個迴圈佇列的佇列控制塊(os_q)而不是指向乙個訊息。迴圈佇列由佇列控制塊(os_q)進行維護,該資料結構詳細資訊如下:

ucos-ii 提供了7 個對訊息佇列進行操作的函式:osqcreate(),osqpend(),osqpost(),osqpostfront(),osqaccept(),osqflush()和osqquery()函式。在這裡只對osqcreate()、osqflush()和osqpostfront()進行說明。

os_event *osqcreate (void **start, int16u size)

建立乙個訊息佇列,第乙個引數是乙個二重指標,該指標指向容納各個訊息的指標的指標陣列的起始位址。在建立訊息佇列之前,首先需要定義乙個指標陣列,該陣列的元素個數必須和訊息佇列最大訊息數相等。然後把這個陣列的起始位址傳給osqcreate。這裡需要注意的是該陣列必須是void型別。第二個引數是訊息佇列最大訊息數,即指標陣列的大小。

int8u osqflush (os_event *pevent)

清空訊息佇列中所有的訊息,重新開始使用。函式引數是指向需要清空訊息佇列的指標。

int8u osqpostfront (os_event *pevent, void *msg)

osqpostfront()函式和osqpost()基本上是一樣的,只是在插入新的訊息到訊息佇列中時,使用osqout 作為指向下乙個插入訊息的單元的指標,而不是osqin。由於osqpend()取出的訊息是osqpostfront()剛剛插入的,因此osqpostfront()函式實現了乙個lifo佇列。

2、 例項

該例項使用兩個任務模擬嵌入式系統中對模擬量的監控以及出錯處理功能。第乙個任務讀取並檢查模擬輸入量的值(如氣壓、溫度、電壓等),如果其超過了一定的閾值,就向第二個任務傳送乙個訊息。該訊息中含有時間資訊、出錯的通道號和錯誤**等資訊。第二個任務接收訊息並負責錯誤處理(顯示錯誤資訊、改正錯誤),任何任務、中斷服務子程式都可以向該任務傳送出錯訊息。

例項原始碼:

Ucosii訊息郵箱使用

設定任務優先順序 define led task prio 6 define led1 task prio 5 用到的ucosii函式 訊息郵箱建立函式 os event osmboxcreate void msg 請求訊息郵箱函式 void osmboxpend os event pevent,i...

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...