ucosii之任務的同步與通訊

2021-07-14 20:44:00 字數 1774 閱讀 4894

為了把描述事件的資料結構統一起來,ucosii使用了事件控制塊ecb的資料結構來描述諸如訊號

量、郵箱、訊息佇列等事件。

任務或中斷服務子程式可以通過事件控制塊ecb來向另外的任務發訊號。

用於通訊的資料結構叫事件控制塊。

對事件控制塊操作的函式有4個:(***為訊號量,郵箱或訊息佇列等)

事件控制塊初始化函式os_eventwaitlistinit(),該函式被os***create()呼叫。

使乙個任務進入等待狀態函式os_eventtaskwait(), 該函式被os***pend()呼叫。

使乙個任務進入就緒態函式os_eventtaskrdy(),該函式被os***post()呼叫。

使乙個等待超時的任務進入就緒態的函式os_eventto(), 該函式被os***pend()呼叫。

訊號量

訊號量由訊號計數器和任務等待錶兩部分組成。

使用事件控制塊成員oseventcnt來做為計數器,oseventtbl陣列來充當等待任務表。

訊號量不使用*oseventptr

當乙個任務需要訪問共享資源時,先要請求管理該資源的訊號量,根據訊號量是否有效來決定該任

務是否執行,如果該訊號量有效(即oseventcnt大於0),則把訊號量減一,繼續執行該任務;當

訊號量無效時,則會在等待任務表中把該任務對應為置一使該任務處於等待狀態,並把等待時限

timeout儲存在tcb的ostcbdly中。

釋放訊號量也叫傳送訊號量,前者更容易理解。

函式ossempost()在對訊號量計數器操作之前,檢查是否有任務等待訊號量,如果沒有把訊號量

計數器oseventcnt加一,如果有則呼叫 排程器os_sched()去執行等待任務中優先順序最高的任 務。

ossempend()與ossempost()一般成對出現。

只有在任務中刪除訊號量不能在中斷服務程式中刪除訊號量。

互斥型訊號量

互斥型訊號量為二值訊號,可以使任務以獨佔方式共享資源。

互斥型訊號量也不使用*oseventptr

ecb成員oseventcnt被分為低八位和高八位兩部分,低八位用來存放訊號值(該值為0xff有效),

高八位用來存放為了避免出現優先順序反轉現象為提公升優先順序的prio.

提公升優先順序的是得到該互斥型訊號量的任務。

訊息郵箱

訊息郵箱是ucosii中另一種通訊機制,可以使乙個任務或者中斷服務子程式向另乙個任務傳送乙個

指標型的變數(資料緩衝區的指標),為適應不同資料的需要建立了乙個資料緩衝區,資料緩衝區

的指標賦給ecb的成員oseventprt.

注意區別:訊息指標與訊息郵箱指標

訊息指標為資料緩衝區的指標;訊息郵箱的指標為指向ecb的指標。

訊息佇列

使用訊息佇列可以在任務間傳遞多條訊息,訊息佇列相當於乙個共用乙個等待列表的訊息郵箱數 組。

ecb成員oseventptr指向乙個佇列控制塊的結構,該結構管理乙個陣列msgtbl,該陣列元素都是

指向訊息的指標。

訊息佇列的核心是訊息指標陣列,

向指標陣列中插入訊息指標的方式有兩種:先進先出(fifo)方式和後進先出(lifo)方式。

當採用先進先出時,訊息佇列將在指標osqin指向的位置插入訊息指標,而把osqout指向的訊息

指標作為輸出;當採用後進先出時,只使用指標osqout,當下訊息佇列插入訊息指標時,指

osqout 先移動,再按指標osqout指向的位置插入訊息指標,輸出時指標osqout無需移動,直

接把osqout指向的訊息指標作為輸出。

ucosii 任務的同步與通訊複習

普通訊號量 sem 互斥訊號量可能出現優先順序翻轉,低優先順序任務獲得訊號量還沒有釋放時發生任務切換,切換到高優先順序任務,高優先順序任務獲得不了訊號量而讓出 cpu,低優先順序任務繼續執行,從表象上看就是低優先順序任務在獲得訊號量後優先順序反而比高優先順序任務優先順序高,原因是 訊號量的約束高於優...

UC OS II基礎知識之任務的同步與事件

為了實現各個任務之間的合作和無衝突的執行,在各任務之間必須建立起一些制約制約關係,uc os ii有兩種制約關係,間接制約和直接制約。直接制約關係 於任務間的合作,間接制約關係源於對資源的共享,1.事件 uc os ii使用訊號量,郵箱 訊息郵箱 和訊息佇列這些中間環節來實現任務間的通訊,為了方便起...

uC OSii之任務劃分

滿足以下幾個指標將會使軟體設計比較簡潔高效。裝置依賴性劃分 主要是對於一些輸入輸出裝置進行劃分,輸入輸出裝置分為主動型和被動性。主動型有乙個盡可能短的中斷服務程式和乙個與之關聯的任務組成 被動性任務由於不能主動觸發,必須有其他任務通過通訊機制向該裝置發出請求,啟用該裝置的相關任務。此類任務有鍵盤任務...