如果任務要等待多個事情的發生,或多個事情中的某乙個發生,那麼就應該採用事件標誌組管理。
1:事件標誌組資料結構
事件標誌組的主要資料結構包括事件標誌組、事件標誌節點、事件標誌組實體、鍊錶等。
事件標誌組os_flag_grp
事件標誌組控制塊是事件的最重要的資料結構之一,其定義如下所示。
typedef struct os_flag_grp os_flag_grp;
事件標誌節點os_flag_node
事件標誌節點包含等待事件標誌的任務的資訊。
乙個阻塞任務對應乙個事件標誌組節點。通過事件標誌節點是否為空可以判斷該事件標誌組是否為有任務等待。
起定義為:
typedef struct os_flag_node os_flag_node;
事件標誌組的實體
#define os_max_flags 5 (os_cfg.h)
os_flag_grp osflagtbl[os_max_flags]; (ucos_ii.h)
系統預設標誌組的實體個數是5個,可以根據自己的需求進行配置。
os_flag_grp、os_flag_node和tcb三種資料結構的關係如下圖:
事件標誌組空閒鍊錶
所有空閒鍊錶標誌組控制塊都鏈結為乙個單鏈表。全域性變數指標osflagfreelist指向該煉表表頭。在系統執行前初始化的時候,所有的事件標誌組控制塊都掛在空閒鍊錶上。
2:事件標誌組初始化os_flaginit
事件標誌組初始化函式,跟訊號量的初始化沒有什麼太大的區別。其主要功能是對所有事件標誌組os_flag_node進行初始化,
同時將所有事件標誌組控制塊鏈結成單鏈表,並osflagfreelist指向該鍊錶。具體**不再分析。
UCOS事件標誌組管理筆記
ucos事件標誌組管理筆記 當某個任務需要與多個任務同步時,須要使用事件標誌組。弄清楚os flag grp os flag node和os tcb之間的關係。當乙個任務開始等待某些事件標誌位時,就回建立乙個事件標誌節點os flag node資料結構,並且將任務所要等待的事件標誌位寫入os fla...
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...