找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2950

积分

0

好友

400

主题
发表于 2 小时前 | 查看: 5| 回复: 0

一、事件标志组简介

1、事件标志组介绍

事件标志位:用一个位,来表示事件是否发生。
事件标志组是一组事件标志位的合集,可以简单的理解事件标志组,就是一个整数。

2、事件标志组的特点

  • 它的每一个位表示一个事件(高8位不算)。
  • 每一位事件的含义,由用户自己决定,如:bit0表示按键是否按下,bit1表示是否接收到信息……
  • 这些位的值为1表示事件发生了,值为0表示事件未发生。
  • 任意任务或中断都可以读写这些位。
  • 可以等待某一位成立,或者等待多位同时成立。

3、事件标志组的标志变量

一个事件组就包含了一个EventBits_t数据类型的变量,变量类型EventBits_t数据类型的定义如下所示:

typedef 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

EventBits_t 实际上是一个 16 位或 32 位无符号的数据类型。

注意:虽然使用了32位/16位无符号的数据类型变量来存储事件标志,但其中的高8位作用是存储事件标志组的控制信息,低24位/8位的作用才是存储事件标志,所以说一个事件标志组最多可以存储24个事件标志!

24位事件标志组示例图:
FreeRTOS EventBits_t 位域结构图:高8位存控制信息,低24位存事件标志

4、事件标志组与队列、信号量的区别

事件标志组与队列、信号量是FreeRTOS中不同的任务间通信与同步机制。信号量通常用于资源计数或简单的同步,而事件标志组则更像一个“广播”系统,允许多个任务等待一组复杂条件,并在条件满足时唤醒所有符合条件的任务。下表清晰地展示了两者的核心区别:

事件标志组与队列信号量功能对比表:唤醒对象与事件清除方式


二、事件标志组相关API函数介绍

1、事件标志组相关API函数

FreeRTOS提供了一系列用于操作事件标志组的API函数,涵盖了创建、设置、清除和等待等操作,部分函数还提供了中断安全版本。掌握这些函数是运用好事件标志组的关键,也是嵌入式系统开发中的基础。

FreeRTOS事件标志组核心API函数列表及功能描述

2、动态创建事件标志组函数

EventGroupHandle_t    xEventGroupCreate( void );

函数返回值:
xEventGroupCreate函数返回值说明

3、清除事件标志位函数

EventBits_t  xEventGroupClearBits( EventGroupHandle_t   xEventGroup,
                                  const EventBits_t    uxBitsToClear);

函数参数:
xEventGroupClearBits函数形参描述

函数返回值:
xEventGroupClearBits函数返回值描述

4、设置事件标志位函数

EventBits_t   xEventGroupSetBits(  EventGroupHandle_t   xEventGroup,
                                  const EventBits_t    uxBitsToSet );

函数参数:
xEventGroupSetBits函数形参描述

函数返回值:
xEventGroupSetBits函数返回值描述

5、等待事件标志位函数

这是事件标志组最核心的函数之一,允许任务阻塞等待一个或多个特定的事件标志位。

EventBits_t   xEventGroupWaitBits(   EventGroupHandle_t   xEventGroup,
                                    const EventBits_t    uxBitsToWaitFor,
                                    const BaseType_t     xClearOnExit,
                                    const BaseType_t     xWaitForAllBits,
                                    TickType_t           xTicksToWait  );

函数参数:
xEventGroupWaitBits函数形参与详细描述

函数返回值:
xEventGroupWaitBits函数返回值说明

函数特点:

  1. 可以等待某一位,也可以等待多位。
  2. 等待期望的事件后,可以选择自动清除相关位或者不清除。这种灵活的内存管理策略对于构建高效的系统至关重要。

6、同步事件标志组函数

xEventGroupSync 函数是一个复合操作,常用于多个任务需要同步到达某个执行点的场景。

EventBits_t     xEventGroupSync(   EventGroupHandle_t   xEventGroup,
                                  const EventBits_t    uxBitsToSet,
                                  const EventBits_t    uxBitsToWaitFor,
                                  TickType_t           xTicksToWait);

函数参数:
xEventGroupSync函数形参描述

函数返回值:
xEventGroupSync函数返回值说明




上一篇:C++包管理器Conan:跨平台依赖管理与CMake集成实战
下一篇:Redis生产环境15条实用规约:避坑、提效与系统稳定指南
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-11 10:28 , Processed in 0.755349 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表