FreeRTOS学习笔记-基于stm32(10)事件标志组

一、事件位、事件标志

事件位用来表明某个事件是否发生,事件位通常用作事件标志,就类似标志位。

二、事件标志组

一个事件组就是一组的事件位,就类似一个标志位寄存器,寄存器的每一位都是一个事件标志。与队列,信号量不同的是:事件标志组可以同时唤醒多个符合条件的任务,且唤醒事件可以选择清除标志位,也可以保留。

我们可以通过宏configUSE_16_BIT_TICKS选择标志组位数,为1时是16位,0是32位,又因为高8位用于其他用处,所以分别可以存储8个、24个事件组。

三、相关API函数

1、创建事件标志组

|---------------------------|---------------|
| 函数 | 描述 |
| xEventGroupCreate() | 使用动态方法创建事件标志组 |
| xEventGroupCreateStatic() | 使用静态方法创建事件标志组 |

xEventGroupCreate() 函数原型:

cs 复制代码
EventGroupHandle_t xEventGroupCreate( void )

参数:无

返回值:NULL: 事件标志组创建失败; 其他值: 创建成功的事件标志组句柄。

2、设置事件位

|-------------------------------|----------------------|
| 函数 | 描述 |
| xEventGroupClearBits() | 将指定的事件位清零 |
| xEventGroupClearBitsFromISR() | 将指定的事件位清零,用在中断服务函数中 |
| xEventGroupSetBits() | 将指定的事件位置 1 |
| xEventGroupSetBitsFromISR() | 将指定的事件位置 1,用在中断服务函数中 |

xEventGroupClearBits() 函数原型:

cs 复制代码
EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear )

参数:xEventGroup: 要操作的事件标志组的句柄;uxBitsToClear: 要清零的事件位(要清除哪一位就给该位置1,可同时清除多位);

返回值: 将指定事件位清零之前的事件组值。

xEventGroupClearBitsFromISR()与xEventGroupClearBits()类似,只是用在中断中,且返回值略有差异:pdPASS: 事件位清零成功;pdFALSE: 事件位清零失败。

xEventGroupSetBits()与xEventGroupClearBits()类似,只不过返回值是:在将指定事件位置 1 后的事件组值。

xEventGroupSetBitsFromISR() 函数原型:

cs 复制代码
BaseType_t xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, BaseType_t *pxHigherPriorityTaskWoken )

此函数与前面函数有所不同,这个函数有三个参数,前两个与前面一致,第三个参数pxHigherPriorityTaskWoken:标记退出此函数以后是否进行任务切换,当此值为 pdTRUE 的时候在退出中断服务函数之前一定要进行一次任务切换。

返回值:pdPASS: 事件位置 1 成功;pdFALSE: 事件位置 1 失败。

3、获取事件标志组值

|-----------------------------|------------------------------|
| 函数 | 描述 |
| xEventGroupGetBits() | 获取当前事件标志组的值(各个事件位的值(各个事件位的值) |
| xEventGroupGetBitsFromISR() | 获取当前事件标志组的值,用在中断服务函数中 |

xEventGroupGetBits()函数原型(与下面函数的参数与返回值一致):

cs 复制代码
#define xEventGroupGetBits( xEventGroup ) xEventGroupClearBits( xEventGroup, 0 )

参数:xEventGroup: 要获取的事件标志组的句柄;

返回值:当前事件标志组的值。

4、等待指定的事件位

|-----------------------|------------|
| 函数 | 描述 |
| xEventGroupWaitBits() | 等待并判断多个事件位 |

当需要与多个事件进行同步时,就可调用此函数。如果任务要等待的事件位还没有准备好(置 1 或清零)的话任务就会进入阻塞态,直到阻塞时间到达或者所等待的事件位准备好

函数原型:

cs 复制代码
EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup, 
                                 const EventBits_t uxBitsToWaitFor, 
                                 const BaseType_t xClearOnExit, 
                                 const BaseType_t xWaitForAllBits, 
                                 TickType_t xTicksToWait )

参数:

xEventGroup: 要等待的事件标志组;

uxBitsToWaitFor:要等待的事件位;

xClearOnExit:pdTRUE:在退出此函数之前由参数uxBitsToWaitFor 所设置的这些事件位清零;pdFALSE:退出这些事件位不变;

xWaitForAllBits:pdTRUE:当 uxBitsToWaitFor 所设置的这些事件位都置 1,或者指定的阻塞时间到的时候才会返回;pdFALSE:只要 uxBitsToWaitFor 所设置的这些事件位其中的任意一个置1,或者指定的阻塞时间到的话函数就会返回;

xTicksToWait:阻塞时间。

返回值:成功:等待到的事件标志位。失败:返回事件组中的事件标志位。

5、同步函数

函数原型:

cs 复制代码
EventBits_t xEventGroupSync( EventGroupHandle_t xEventGroup,
                             const EventBits_t uxBitsToSet,
                             const EventBits_t uxBitsToWaitFor,
                             TickType_t xTicksToWait )

参数:

xEventGroup: 要等待的事件标志组;

uxBitsToSet:达到同步后,要设置的事件标志;

uxBitsToWaitFor:要等待的事件位;

xTicksToWait:阻塞时间。

返回值:成功:等待到的事件标志位。失败:返回事件组中的事件标志位。

相关推荐
zcmodeltech15 分钟前
源网荷储一体化沙盘模型多场景控制系统设计——基于STM32与Modbus RTU的源网荷储、多能互补、冷热电三联供全场景联动方案,服务范围覆盖全国
数据库·人工智能·stm32·单片机·嵌入式硬件
一条破秋裤16 分钟前
17_ADC原理与转换模式
笔记·stm32·学习
知产xiao_xin17 分钟前
C语言运算符的种类、运算优先级和结合性
笔记
威嵌神州1 小时前
军工加固计算机七大核心特性解析|国产化、宽温、强加固工程实现
嵌入式硬件·计算机网络·fpga开发
传奇开心果编程1 小时前
【Rust入门知识点学与练】第5课:函数
开发语言·学习·rust
Brilliantwxx1 小时前
【STM32】 深度详解总线架构 哈佛总线结构
stm32·嵌入式硬件·架构
恶魔泡泡糖1 小时前
stm32F103C8T6标准库DWT应用DHT11温湿度传感器数据手册说明
stm32·单片机·嵌入式硬件
知产xiao_xin1 小时前
《伯尔尼公约》—— 版权保护期
经验分享·笔记·知识产权
深圳市恒锐丰科技杨生1 小时前
EG1192S 10‑100V 高压集成上管降压 DC‑DC|零功耗使能 Buck 电源芯片
嵌入式硬件·硬件工程
单片机仿真设计1 小时前
【Proteus 仿真】基于 STM32 单片机鸡舍环境监控系统设计(仿真 + 源码)
stm32·单片机·嵌入式硬件·proteus·毕设