1、事件位(事件標志)
事件位用來表明某個事件是否發生,事件位通常用作事件標志,比如下面的幾個例子:
● 當收到一條消息并且把這條消息處理掉以后就可以將某個位(標志)置 1,當隊列中沒有消息需要處理的時候就可以將這個位(標志)置 0。
● 當把隊列中的消息通過網絡發送輸出以后就可以將某個位(標志)置 1,當沒有數據需要從網絡發送出去的話就將這個位(標志)置 0。
● 現在需要向網絡中發送一個心跳信息,將某個位(標志)置 1。現在不需要向網絡中發送心跳信息,這個位(標志)置 0。
2、事件組
一個事件組就是一組的事件位,事件組中的事件位通過位編號來訪問,同樣,以上面列出的三個例子為例:
● 事件標志組的 bit0 表示隊列中的消息是否處理掉。
● 事件標志組的 bit1 表示是否有消息需要從網絡中發送出去。
● 事件標志組的 bit2 表示現在是否需要向網絡發送心跳信息。
3、事件標志組和事件位的數據類型
事件標志組的數據類型為 EventGroupHandle_t,當 configUSE_16_BIT_TICKS 為 1 的時候 事件標志組可以存儲 8 個事件位,當 configUSE_16_BIT_TICKS 為 0 的時候事件標志組存儲 24個事件位。
事件標志組中的所有事件位都存儲在一個無符號的 EventBits_t 類型的變量中,EventBits_t 在 event_groups.h 中有如下定義:
typedef
TickType_tEventBits_t;
數據類型 TickType_t 在文件 portmacro.h 中有如下定義:
#if(configUSE_16_BIT_TICKS==1)
typedef
uint16_t
TickType_t;
#defineportMAX_DELAY(TickType_t)0xffff
#else
typedef
uint32_t
TickType_t;
#defineportMAX_DELAY(TickType_t)0xffffffffUL
#defineportTICK_TYPE_IS_ATOMIC1
#endif
可以看出當 configUSE_16_BIT_TICKS 為 0 的時候 TickType_t 是個 32 位的數據類型,因 此 EventBits_t 也是個 32 位的數據類型。EventBits_t 類型的變量可以存儲 24 個事件位,另外的那高 8 位有其他用。事件位 0 存放在這個變量的 bit0 上,變量的 bit1 就是事件位 1,以此類推。
-
嵌入式
+關注
關注
5072文章
19026瀏覽量
303534 -
數據
+關注
關注
8文章
6909瀏覽量
88850 -
FreeRTOS
+關注
關注
12文章
483瀏覽量
62019
發布評論請先 登錄
相關推薦
評論