2007-12-24 14:25:05
uc/os-ii中的訊息郵箱
訊息郵箱是uc/os-ii中的另一種通訊機制,可以使乙個任務或者中斷服務子程式向另乙個任務傳送乙個指標型的變數。通常該指標指向乙個包含了「訊息」的特定資料結構。
應用程式可以使用多少個郵箱,其最大數目是由os_cfg.h檔案中的配置常數os_max_events設定。
任務或者中斷服務子程式都可以呼叫函式o**boxpost(),o**boxpostopt() ,而只有任務可以呼叫o**boxdel()
o**boxpend(), o**boxquery()。
void *o**boxaccept (os_event *pevent)
無等待的從郵箱中得到一則訊息。
os_event *o**boxcreate (void *msg)
建立乙個郵箱。
msg:用來初始化建立的訊息郵箱,如果該指標不為空,則建立的訊息郵箱將含有訊息。
返回值:指向分配給所建立的訊息郵箱的事件控制塊的指標。如果沒有可用的事件控制塊,則返回空指標。
os_event *o**boxdel (os_event *pevent, int8u opt, int8u *err)
刪除乙個郵箱。當將os_cfg.h檔案中的os_mbox_del_en設為1時,該函式才會被編譯。使用該函式時要注意,多個任務可能試圖操作已經刪除的郵箱。在刪除郵箱之前,必須首先刪除可能操作該郵箱的所有任務。
pevent:指向郵箱的指標。該指標是在郵箱建立時返回給使用者應用程式的指標。
opt:該先項定義郵箱的刪除條件,可以選擇只能在已經沒有任何在等待該郵箱的訊息時,才能刪除郵箱
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 *o**boxpend (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 o**boxpost (os_event *pevent, void *msg)
向郵箱傳送一則訊息。
pevent:指向即將接收訊息的訊息郵箱的指標。
msg:即將實際傳送給任務的的訊息。訊息是乙個以指標表示的苛種資料型別的變數,在不同的程式中訊息的使用也可能不同。不允許傳遞乙個空指標,國灰這意味著訊息郵箱為空。
返回值:該函式的返回值為下述之一:
os_no_err 訊息成功地放到訊息郵箱中。
os_mbox_full 訊息郵箱已經包含了其他訊息,已滿。
os_err_event_type pevent不是指向訊息郵箱的指標。
os_err_pevent_null pevent是空指標。
os_err_post_null_ptr 使用者試圖發出空指標。根據規則,在這裡不支援空指標。
int8u o**boxpostopt (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 o**boxquery (os_event *pevent, os_mbox_data *p_mbox_data)
查詢乙個郵箱的狀態。
pevent:指向即將接收訊息的訊息郵箱的指標。
pdata:指向os_mbox_data資料結構的指標,該資料結構包含下述成員。
void *o**sg; /*訊息郵箱中訊息的複製*/
int8u oseventtbl[os_event_tbl_size]; /*訊息郵箱等待佇列的複製*/
int8u oseventgrp
返回值:該函式返回值為下述之一:
os_no_err 呼叫成功
os_err_event_null pevent是空指標
Ucosii訊息郵箱使用
設定任務優先順序 define led task prio 6 define led1 task prio 5 用到的ucosii函式 訊息郵箱建立函式 os event osmboxcreate void msg 請求訊息郵箱函式 void osmboxpend os event pevent,i...
uCOS II郵箱和訊息佇列
1 ucos ii郵箱和訊息佇列 郵箱和訊息佇列是ucos ii中任務間的通訊機制,它可以使乙個任務或者中斷服務子程式向另乙個任務傳送以指標方式定義的變數。因具體的應用有所不同,每個指標指向的資料結構變數也有所不同。兩者都基於事件控制塊os event。與郵箱相比,訊息佇列在os event基礎上加...
uC OS II 學習筆記 訊息郵箱實驗
通過led0任務函式實現times計數,通過led1任務函式實現tft液晶屏顯示times數值。已知 start task建立訊息郵箱 led0向訊息郵箱傳送訊息函式 led1請求訊息郵箱函式 變數定義 os event pmsgbox 定義事件控制塊 u32 times 類似於實參 u32 pst...