1. 程式人生 > >(轉)ucos的事件 任務的通訊和同步 訊號量 互斥量 訊息郵箱 訊息佇列

(轉)ucos的事件 任務的通訊和同步 訊號量 互斥量 訊息郵箱 訊息佇列

()    使一個等待超時的任務進入就緒狀態 
事件控制塊連結串列也有空和工作中的2種區分,類似於任務控制塊,就不多說了

七、訊號量詳細
重要組成:型別    cnt     訊號量指標為空     控制塊
1.建立訊號量
OSSemCreat(cnt)------------設定型別 設定初始化計數 設定指向緩衝區為空 初始化事件控制塊  返回訊號量指標
2.請求訊號量
OSSemPend(訊號量指標  時限   錯誤資訊) 訊號量無效時,任務會等待
OSsemAccept(訊號量) 訊號量無效時,任務直接繼續執行
3.釋放訊號量
OSSemPost(訊號量指標)
4.刪除訊號量
OSSemDel(訊號量名、條件選項、錯誤資訊)
5.查詢訊號量狀態
OSSemQuery()

八、優先順序反轉和互斥量
    優先順序反轉:ab等待狀態,c執行;c最低優先順序,在c沒有釋放訊號量的情況下,a運行了,那a會等待,然後c運行了在釋放訊號量之前有個任務b運行了,那b只得在a之前運行了。好像b的優先順序比a高了。
    出現這種情況是因為低優先順序的任務使用訊號量的過程中被打斷,不能釋放訊號量。
    解決方法就是c使用訊號量的時候提高優先順序(因為在使用訊號量比a的優先順序要高),釋放訊號量再恢復原來的優先順序。

九、互斥量
    任務可用互斥量,來實現對資源的獨佔      
    資料型別要為互斥量型別     cnt分為高8位元組和低8位元組,低8位0xff表示訊號有效,高8位記錄了臨時的提升的優先順序。
1.建立互斥量
OSMutexCreat(提升的優先順序 錯誤資訊)
2.請求互斥量
OSMutexPend(互斥量指標  超時    錯誤資訊)
OSMutexAccept(互斥量指標  錯誤資訊)  互斥量無效任務會繼續執行
3.釋放互斥量
OSMutexPost(互斥量指標)
4.獲取互斥量的當前狀態
OSMutexQuery(互斥量指標  儲存的資料結構)
5.刪除互斥量
OSMutexDel(互斥量指標 直接刪除還是等待任務執行完刪    錯誤資訊)

十、訊息郵箱
1.OSMboxCreat(msg)
訊息郵箱 :設定型別為訊息郵箱型別;設定指標為空,或指向緩衝區;設定cnt為0;初始化ECB
2.OSMboxPost(訊息郵箱的指標, 訊息緩衝區指標)
傳送訊息郵箱