ucos事件標誌組管理筆記ⅰ
當某個任務需要與多個任務同步時,須要使用事件標誌組。
⒈弄清楚os_flag_grp、os_flag_node和os_tcb之間的關係。
當乙個任務開始等待某些事件標誌位時,就回建立乙個事件標誌節點os_flag_node資料結構,並且將任務所要等待的事件標誌位寫入os_flag_node的分量.osflagnodeflags。然後將該資料結構分量.osflagnodeflaggrp指向事件標誌組os_flag_grp,將.osflagnodetcb指向該任務的控制塊os_tcb,建立起任務與事件標誌組之間的聯絡,說明該任務是等待該事件標誌組中某些事件標誌位的任務。當有多個任務都需要等待某個事件標誌組中某些事件標誌位時,這些任務分別建立自己的事件標誌節點。並且將這些事件標誌節點通過分量.osflagnodenext和.osflagnodeprev連線成鏈。
⒉任務可以等待事件標誌組中某些位置位1,也可以等待事件標誌組中某些位清0,而置1(或清0)又可以分為所有事件都發生的「與」型和任何乙個事件發生的「或」型。這樣便有了4種不同的型別存放在.osflagnodewaittype(os_flag_node)中。
⒊事件標誌組和訊號量我覺得是有不同的。
訊號量建立以後,假設初始值為n,前n個任務呼叫ossempend()函式都會得到訊號量。之後如果第n+1個任務呼叫ossempend()函式申請訊號量,該任務將會被置為等待事件發生的狀態(睡眠態)。只到前n個任務中有任務執行完了所要執行的程式,呼叫ossenmpost()函式,釋放了所占用了訊號量,第n+1個任務。(這裡假設該任務是所有等待訊號量任務中優先順序最高的任務)才會獲得訊號量,被從睡眠態轉入就緒態。
而事件標誌組是事件標誌組建立之後,某個任務需要事件標誌組中某些事件標誌位(置位或者清0)才能繼續執行,於是任務呼叫osflagpend()函式,而此時若這些標誌位滿足要求,任務返回,繼續執行。否則,任務將被掛起。而當有另外乙個任務呼叫osflagpost()函式將前乙個任務所需要的標誌位(置位或清0)使之滿足要求,前乙個被掛起的任務將被置為就緒態。因此幾個任務可以同時得到所需要的事件標誌進入就緒態。注意:只要任務所需要的標誌位滿足要求,任務便進入就緒態。與訊號量不同,訊號量中的任務需要是在等待該訊號量中優先順序最高的任務才能得到訊號量進入就緒態。事件標誌組可以乙個任務與多個任務同步,而訊號量只能是乙個任務與另乙個任務同步。v
UC OS II 事件標誌組管理(一)
如果任務要等待多個事情的發生,或多個事情中的某乙個發生,那麼就應該採用事件標誌組管理。1 事件標誌組資料結構 事件標誌組的主要資料結構包括事件標誌組 事件標誌節點 事件標誌組實體 鍊錶等。事件標誌組os flag grp 事件標誌組控制塊是事件的最重要的資料結構之一,其定義如下所示。typedef ...
FreeRTOS 事件標誌組
訊號量同步只能與單個的事件或任務進行同步。事件標誌組與多個事件或任務進行同步 事件位用來表明某個事件是否發生,事件組是一組事件位 動態方法建立事件標誌組 eventgrouphandle t xeventgroupcreate void 設定事件位 eventbits t xeventgroupse...
ucos iii 事件標誌組
建立事件標誌組 osflagcreate os cfg flag en os flag grp enginestatus os err err osflagcreate enginestatus,engine status os flags 0,err 刪除事件標誌組 osflagdel os cf...