UCOSII操作系統學習之任務間的通信(1)

1.任務間通訊方式:信號量和郵箱

爲了把描述事件的數據結構統一起來,UCOSII 使用叫做事件控制塊(ECB)的數據結構來描述諸如信號量、郵箱(消息郵箱)和消息隊列這些事件。信號量,郵箱,消息隊列都是一類事件

2.信號量:                          1) 創建信號量OS_EVENT *OSSemCreate (INT16U cnt)

                                           2)請求信號量 OSSempend(OS_EVENT *pevent,INT16U timeout,INT8U *err;

                                           3)  發送信號量(訪問共享資源結束後,釋放信號量)OSSemPost(OS_EVENT *pevent);

                                           4)刪除信號量(不需要某個信號量時) OSSemDel(OS_EVENT *pevent,INT8U opt,INT8U *err)。

3.郵箱:在多任務操作系統中,常常需要在任務與任務之間通過傳遞一個數據(這個數據叫消息的方式來進行通信。爲了達到這個目的,可以在內存中創建一個存儲空間作爲該數據的緩衝區。如果把這個緩衝區稱之爲消息緩衝區,這樣在任務間傳遞數據的最簡單辦法就是傳遞消息緩衝區的指針。我們把用來傳遞消息緩衝區指針的數據結構叫做郵箱

   1)創建消息郵箱:OS_EVENT *OSMboxCREAT(void *msg);函數中的參數msg爲消息的指針,函數的返回值爲消息郵箱的指針。

   2)  向消息郵箱中發送消息函數 OSMBoxPost(OS_EVENT *pevent,void *msg);其中pevent爲消息郵箱的指針,msg爲消息指針。

   3)  請求郵箱:OSMboxPend ( vOS_EVENT *pevent, INT16U timeout, INT8U err),這個函數的主要作用就是查看郵箱指針OSEventPtr是否爲NULL,如果不是NULL就把郵箱中的消息指針返回給調用函數的任務,同時用OS_NO_ERR通過函數的參數err通知任務獲取消息成功;如果郵箱指針OSEventPtr是NULL,則使任務進入等待狀態,並引發一次任務調度。pevent爲請求郵箱指針,timeout爲等待時限,err爲錯誤信息。

   4)查詢郵箱狀態:OSMboxQuery(OS_EVENT *pevent,OS_MBOX_DATA *pdata),其中pevent爲纖細郵箱指針,pdata爲存放郵箱信息的結構。

   5)刪除郵箱函數:OS_EVENT *OS_MboxDel(OS_EVENT *pevent,INT8U opt,INT8U *err);其中pevent爲消息郵箱指針,opt爲刪除選項,err爲錯誤信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章