信號量集
信號量集由兩部分組成:標識組和等待任務列表;
標識組由三部分組成:1.OSFlagType——識別是否爲信號量集的標誌
2.OSFlagWaitList——指向等待任務列表的指針
3.OSFlagFlags——信號量表
1.OSFlagType被固定爲OS_EVENT_TYPE_FLAG,所以這裏不做過多討論
2.OSFlagWaitList指的是一個void類型的指針,主要用途是用來指向一個鏈表,該鏈表中存放了給信號量集的全部等待任務,而也就是我們即將說到的等待任務列表。
3.信號量表實際上代表着一個位圖,可以通過OS_CFG.H來定製位圖的位數(8/16/32)。這裏我們以8位位圖位例,該位圖的每個位也就代表了一個接收並被保存的信號量值。
注意:信號量集的標識組只是保存了各輸入信號量的值,而至於如何對這些任務進行處理則是等待任務的事情
等待任務必須完成一下兩個操作:1.在多個信號量輸入中挑選等待任務感興趣的輸入
2.把挑選出來的輸入按照等待任務所期待的方式運算,以得到輸出。
1.值得注意的是,爲了解決第一個問題,也就是挑選信號量。所以ucos2定義了長度與輸入標誌列表-信號量表OSFlagFlags長度相等OSFlagNodeFlags,目的顯而易見,就是作爲過濾器在多個信號量輸入中挑選等待任務感興趣的輸入
2.接下來爲了處理第二個問題,ucos2又定義了一個OSFlagNodeWaitType變量負責過濾出來的信號量的運算。
有了上面的介紹,相信看下面這個圖就沒問題了: