訊息信箱

訊息信箱

訊息信箱是uC/OS-II中的另一種通信機制,可以使一個任務或者中斷服務子程式向另一個任務傳送一個指針型的變數。

通常該指針指向一個包含了“訊息”的特定數據結構。

基本介紹

  • 中文名:訊息信箱
  • 外文名:Message Mailboxes
  • 性質:是uC/OS-II中的另一種通信機制
  • 概述:配置常數OS_MAX_EVENTS設定
  • 接收:指向接收訊息的訊息信箱指針
概述,建立信箱,刪除信箱,刪除錯誤,接收,接受錯誤,傳送,定義訊息,數據結構,

概述

應用程式可以使用多少個信箱,其最大數目是由OS_CFG.H檔案中的配置常數OS_MAX_EVENTS設定。
任務或者中斷服務子程式都可以調用函式OSMboxPost(),OSMboxPostOpt() ,而只有任務可以調用OSMboxDel()
OSMboxPend(), OSMboxQuery()。
void *OSMboxAccept (OS_EVENT *pevent)
無等待的從信箱中得到一則訊息。

建立信箱

OS_EVENT *OSMboxCreate (void *msg)
msg:用來初始化建立的訊息信箱,如果該指針不為空,則建立的訊息信箱將含有訊息。
返回值:指向分配給所建立的訊息信箱的事件控制塊的指針。如果沒有可用的事件控制塊,則返回空指針

刪除信箱

OS_EVENT *OSMboxDel (OS_EVENT *pevent, INT8U opt, INT8U *err)
當將OS_CFG.H檔案中的OS_MBOX_DEL_EN設為1時,該函式才會被編譯。使用該函式時要注意,多個任務可能試圖操作已經刪除的信箱。在刪除信箱之前,必須首先刪除可能操作該信箱的所有任務
pevent:指向信箱的指針。該指針是在信箱建立時返回給用戶應用程式的指針。
opt:該先項定義信箱的刪除條件,可以選擇只能在已經沒有任何在等待該信箱的訊息時,才能刪除信箱
(OS_DEL_NO_PEND);或者不管有沒有任務在等待信箱的訊息,立即刪除信箱(OS_DEL_ALWAYS),在這種情況 下,所有等待信箱訊息的任務都會立即進入就緒態。

刪除錯誤

err:指向出錯代碼的指針
返回的出錯代碼可以是以下幾種情況之一。
OS_NO_ERR 調用成功,信箱已經被刪除。
OS_ERR_DEL_ISR 試圖在中斷服務子程式中刪除信箱。
OS_ERR_INVALID_OPT 無效的opt參數,用戶沒有將opt定義為上述兩種情況之一。
OS_ERR_EVENT_TYPE pevent不是指向信箱的指針。
OS_ERR_PEVENT_NULL 已經沒有OS_EVENT數據結構可以使用。
返回值:返回NULL表示信箱已被刪除;返回pevent表示信箱沒有刪作,。
void *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)
等待信箱中的訊息。

接收

pevent:指向即將接收訊息的指針
timeout:允許一個任務在經過了指定數目的時鐘節拍後還沒有得到需要的訊息時恢復運行。如果該值為0表示任務將持續等待訊息。

接受錯誤

err:指向包含錯誤碼的變數的指針。該函式返回的錯誤碼可能為下述幾種情況
OS_NO_ERR 訊息被正確地接收。
OS_TIMEOUT 訊息沒有在指定的等待時間內送到。
OS_ERR_EVENT_TYPE pevent不是指向訊息信箱的指針。
OS_ERR_PEND_ISR 從中斷調用該函式。
OS_ERR_PEVENT_NULL pevent是空指針。
返回值:該函式返回接收的訊息並將*err置為OS_NO_ERR.
INT8U OSMboxPost (OS_EVENT *pevent, void *msg)
向信箱傳送一則訊息。

傳送

msg:即將實際傳送給任務的的訊息。訊息是一個以指針表示的苛種數據類型變數,在不同的程式中訊息的使用也可能不同。不允許傳遞一個空指針,國灰這意味著訊息信箱為空。
返回值:該函式的返回值為下述之一:
OS_NO_ERR 訊息成功地放到訊息信箱中。
OS_MBOX_FULL 訊息信箱已經包含了其他訊息,已滿。
OS_ERR_EVENT_TYPE pevent不是指向訊息信箱的指針。
OS_ERR_PEVENT_NULL pevent是空指針。
OS_ERR_POST_NULL_PTR 用戶試圖發出空指針。根據規則,在這裡不支持空指針。
INT8U OSMboxPostOpt (OS_EVENT *pevent, void *msg, INT8U opt)
向信箱傳送一則訊息。該函式可以向等待信箱的所有任務傳送訊息(廣播)。

定義訊息

pevent:指向即將接收訊息的訊息信箱的指針
msg:即將實際傳送給任務的訊息。訊息是一個以指針表示的某種數據類型的變數,在不同的程式中訊息的使用也可能不同。不允許傳遞一個空指針,因為這意味著訊息信箱為空。
opt:定義訊息只發給等待信箱訊息的任務中優先權最高的任務(將opt置為OS_POST_OPT_NONE),或者讓所有等待 信箱訊息的任務都得到訊息(將opt置為OS_POST_OPT_BROADCAST)。
返回值:
err 指向包含錯誤碼的變數指針,返回的錯誤碼可能為下述幾種之一:
OS_NO_ERR 訊息成功地放到訊息信箱中。
OS_MBOX_FULL 訊息信箱已經包含了其他訊息,已滿。
OS_ERR_EVENT_TYPE pevent不是指向訊息信箱的指針。
OS_ERR_PEVENT_NULL pevent是空指針。
OS_ERR_POST_NULL_PTR 用戶試圖發出空指針。根據規則,在這裡不支持空指針。
INT8U OSMboxQuery (OS_EVENT *pevent, OS_MBOX_DATA *p_mbox_data)
查詢一個信箱的狀態。

數據結構

pdata:指向OS_MBOX_DATA數據結構的指針,該數據結構包含下述成員。
void *OSMsg; /*訊息信箱中訊息的複製*/
INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; /*訊息信箱等待佇列的複製*/
INT8U OSEventGrp
返回值:該函式返回值為下述之一:
OS_NO_ERR 調用成功
OS_ERR_EVENT_NULL pevent是空指針
OS_ERR_EVENT_TYPE pevent不是指向訊息信箱的指針

相關詞條

熱門詞條

聯絡我們