FreeRTOS学习:11.事件标志组

一、基本介绍

        事件标志位:用一位数据标识事件是否已经发生。

        事件标志组:一组事件标志位的集合,就是一个整数,其中的每个二进制位都代表了一个事件的状态

事件标志组有以下几个特点

1.一个位表示一个事件,但高八位不算。

2.每一位事件的含义可以由用户自己定义。

3.任意中断和任务都可以读写这些位。

4.可以等待某一位成立,也可以等待多位成立。

在FreeRTOS中,事件标志组可以是16位整型或者是32位的整型,当configUSE_16_BIT_TICKS置1时,是uint16_t,置0时,为uint3_t。不论是16位或是32位,其高八位都不能标识事件标志

        事件标志组与队列和信号量有什么区别呢?区别如下:

1、队列、信号量发生时,只会唤醒一个任务,当一个任务占用时,另一个任务就无法获取。而事件标志组在满足条件时,会唤醒所有符合条件的任务,相当于“广播”。

2.队列、信号量都是消耗的资源,队列数据获取之后就删除(一般情况),信号量获取就减少。而信号量可以删除也可以保留。

二、函数介绍

事件标志组相关的函数主要有以下几个:

主要为四种:创建、清除、设置、等待

1.xEventGroupCreate()

EventGroupHandle_t xEventGroupCreate (void);

返回值为NULL,则创建失败,其他值则事件标志组创建成功,返回其句柄。

2.xEventGroupSetBits()

EventBits_t xEventGroupSetBits(EventGroupHandle_t xEventGroup,
                               const EventBits_t uxBitsToSet)

xEventGroup----待操作的事件标志组句柄。

uxBitsToSet----待设置的事件标志位。

返回值为事件标纸组中的事件标志位值。高八位为0。

3.xEventGroupClearBits()

xEventGroup----待操作的事件标志组句柄。

uxBitsToSet----待清零的事件标志位。

返回值为清零事件标志位之前事件组中事件标志位的值

4.xEventGroupWaitBits()

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

形参含义如下:

注意:该函数可以等待一位,也可以等待多位。等到期望的事件后,可以清除某些位。

三、问题与总结

        事件标志组占用的内存更小,在应用多任务同步时,可以使用任务通知组。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值