複製鏈接
請複製以下鏈接發送給好友

消息郵箱

鎖定
消息郵箱是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不是指向消息郵箱的指針