在裸机编程过程中,经常会用到标志位。但是在操作系统中,涉及到多个任务同时访问的问题,因此FreeRTOS提供了事件标志组机制。
先看一下事件标志组结构体
/* 事件标志组结构体 */
typedef struct EventGroupDef_t
{
EventBits_t uxEventBits; /* 事件标志位 */
List_t xTasksWaitingForBits; /* 等待事件标志位而阻塞的任务列表 */
......
}EventGroup_t;
事件标志位可以选择16位/32位,其中高8位作为控制位,低8位/24位作为事件标志位。
#if configUSE_16_BIT_TICKS == 1
#define eventCLEAR_EVENTS_ON_EXIT_BIT 0x0100U
#define eventUNBLOCKED_DUE_TO_BIT_SET 0x0200U
#define eventWAIT_FOR_ALL_BITS 0x0400U
#define eventEVENT_BITS_CONTROL_BYTES 0xff00U
#else
#define eventCLEAR_EVENTS_ON_EXIT_BIT 0x01000000UL /* 在退出前清除等待位 */
#define eventUNBLOCKED_DUE_TO_BIT_SET 0x02000000UL /*