一、事件标志组简介1. 事件标志组介绍事件标志位:单独 1 个二进制位,标记某一件事件是否发生。 事件标志组:多个事件标志位组成的集合,底层本质是一个无符号整数。2. 事件标志组核心特点变量中高 8 位用于内核控制,只有低 24 位有效做事件标志,最多支持 24 个独立事件;每一位含义用户自定义:例 bit0 = 按键按下、bit1 = 串口收到数据、bit2 = 传感器就绪;bit=1:事件已发生;bit=0:事件未发生;任务、中断服务函数都能读写标志位;等待模式两种:等待任意一位触发 / 等待全部多位同时触发。3. 底层数据类型 EventBits_ttypedef TickType_t EventBits_t; #if ( configUSE_16_BIT_TICKS == 1 ) typedef uint16_t TickType_t; #else typedef uint32_t TickType_t; #endif #define configUSE_16_BIT_TICKS 0 // 默认32位模式32 位模式:低 24 位存事件,高 8 位内核自用;最多 24 个事件标志;16 位模式:低 8 位存事件,高 8 位内核自用;最多 8 个事件标志;重点:不能使用高 8 位做自定义事件位,会破坏内核状态。4. 事件标志组 vs 队列 / 信号量 核心区别信号量:计数 / 互斥,用于资源互斥、任务通知资源可用,消耗型,一次只能传递一个 “许可”;队列:存储完整数据,用于任务间传递缓存、结构体、数值;事件标志组:只记录事件 “是否发生”,无数据、不消耗;多事件并行记录,适合多条件等待(多按键、多外设就绪同步);信号量 / 队列:1 次触发只能唤醒 1 个等待任务;事件标志组:置位后所有满足等待条件的任务都会被唤醒;信号量数值用完自动清零;事件标志可选择自动清零或保持置 1。二、事件标志组全套 API 详解1. 创建事件标志组(动态创建)EventGroupHandle_t xEventGroupCreate( void );返回值:非 NULL:事件标志组句柄,创建成功;NULL:堆内存不足,创建失败;头文件依赖:#include "event_groups.h"配置宏开启:configUSE_EVENT_GROUPS = 12. 清除标志位 xEventGroupClearBitsEventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear );参数xEventGroup:事件标志组句柄;uxBitsToClear:要清零的位掩码,例(10)|(11)清除 bit
FreeRTOS 事件标志组
发布时间:2026/7/1 10:13:05
一、事件标志组简介1. 事件标志组介绍事件标志位:单独 1 个二进制位,标记某一件事件是否发生。 事件标志组:多个事件标志位组成的集合,底层本质是一个无符号整数。2. 事件标志组核心特点变量中高 8 位用于内核控制,只有低 24 位有效做事件标志,最多支持 24 个独立事件;每一位含义用户自定义:例 bit0 = 按键按下、bit1 = 串口收到数据、bit2 = 传感器就绪;bit=1:事件已发生;bit=0:事件未发生;任务、中断服务函数都能读写标志位;等待模式两种:等待任意一位触发 / 等待全部多位同时触发。3. 底层数据类型 EventBits_ttypedef TickType_t EventBits_t; #if ( configUSE_16_BIT_TICKS == 1 ) typedef uint16_t TickType_t; #else typedef uint32_t TickType_t; #endif #define configUSE_16_BIT_TICKS 0 // 默认32位模式32 位模式:低 24 位存事件,高 8 位内核自用;最多 24 个事件标志;16 位模式:低 8 位存事件,高 8 位内核自用;最多 8 个事件标志;重点:不能使用高 8 位做自定义事件位,会破坏内核状态。4. 事件标志组 vs 队列 / 信号量 核心区别信号量:计数 / 互斥,用于资源互斥、任务通知资源可用,消耗型,一次只能传递一个 “许可”;队列:存储完整数据,用于任务间传递缓存、结构体、数值;事件标志组:只记录事件 “是否发生”,无数据、不消耗;多事件并行记录,适合多条件等待(多按键、多外设就绪同步);信号量 / 队列:1 次触发只能唤醒 1 个等待任务;事件标志组:置位后所有满足等待条件的任务都会被唤醒;信号量数值用完自动清零;事件标志可选择自动清零或保持置 1。二、事件标志组全套 API 详解1. 创建事件标志组(动态创建)EventGroupHandle_t xEventGroupCreate( void );返回值:非 NULL:事件标志组句柄,创建成功;NULL:堆内存不足,创建失败;头文件依赖:#include "event_groups.h"配置宏开启:configUSE_EVENT_GROUPS = 12. 清除标志位 xEventGroupClearBitsEventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear );参数xEventGroup:事件标志组句柄;uxBitsToClear:要清零的位掩码,例(10)|(11)清除 bit