目录
说明:
一、队列集
1.1、队列集简介
1.2、队列集作用
二、队列集相关API函数
2.1、创建队列集函数
2.2、往队列集添加队列函数
2.3、队列集移除队列函数
2.4、获取队列集中有有效队列
三、事件标志组
3.1、什么是事件标志组
3.2、事件标志组的特点
3.3、事件标志组数据类型
3.4、事件标志组与队列、信号量区别
四、事件标志组相关API函数
4.1、常用的API函数
4.2、动态创建事件标志组函数
4.3、清除事件标志位函数
4.4、设置事件标志位函数
4.5、等待事件标志位函数
说明:
关于内容:
1)以下内容多为概念了解与步骤分析
2)暂无个人示例代码,使用的是FreeRTOS的官方示例代码
3)若想移植代码测试的,请移步其它地方寻找,下文内容暂无个人示例代码供测试
关于其它:
1)操作系统:win 10
2)平台:keil 5 mdk
3)语言:c语言
4)板子:STM32系列移植FreeRTOS
一、队列集
1.1、队列集简介
一个队列只允许任务间传递的信息为同一种数据类型,如果需要在任务间传递不同数据类型的信息时,可以使用队列集。
1.2、队列集作用
用于对多个队列或信号量进行监听,其中不管哪一个消息到来,都可以让任务退出阻塞状态。
二、队列集相关API函数
2.1、创建队列集函数
函数名称:QueueSetHandle_t xQueueCreateSet(const UbaseType_t uxEventQueueLength)
作用:创建队列集
参数含义:
参数名:uxEventQueueLength,含义:队列集可容纳的队列数量
返回值:
返回,NULL,含义:队列集创建失败
返回,其他值,队列集创建成功,返回队列集句柄
2.2、往队列集添加队列函数
函数名称:BaseType_t xQueueAddToSet(QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet);
作用:往队列集添加队列
参数含义:
参数名:xQueuOrSemaphore,含义:待添加的队列句柄
参数名:xQueueSet,含义:队列集
返回值:
返回,pdPASS,含义:队列集添加队列成功
返回,pdFALL,含义:队列集添加队列失败
注意点:队列被添加到队列集时,队列中不能有有效的信息
2.3、队列集移除队列函数
函数名称:BaseType_t xQueueRemoveFromSet(QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet);
作用:队列集移除队列
参数含义:
参数名:xQueuOrSemaphore,含义:待移除的队列句柄
参数名:xQueueSet,含义:队列集
返回值:
返回,pdPASS,含义:队列集移除队列成功
返回,pdFALL,含义:队列集移除队列失败
注意点:队列集移除队列前,队列中不能有有效的信息
2.4、获取队列集中有有效队列
函数名称:QueueSetMemberHandle_t xQueueSelectFromSet(QueueSetMemberHandle_t xQueueSet, TickType_t const xTicksTowait);
作用:获取队列集中有有效消息的队列
参数含义:
参数名:xQueueSet,含义:队列集
参数名:xTicksTowait,含义:阻塞超时时间
返回值:
返回,NULL,含义:获取消息失败
返回,其他值,含义:获取到消息的队列句柄
三、事件标志组
3.1、什么是事件标志组
事件标志位,用一个位,来表示事件是否发生。而事件标志组是一组事件标志位的集合,可以简单的理解事件标志组,本质上就是一个整数。
3.2、事件标志组的特点
1)每一个位表示一个事件(高8位不算)
2)每一个事件的含义,由用户自己决定
3)任意任务或中断都可以读写这些位
4)可以等待某一位成立,或等待多位同时成立
3.3、事件标志组数据类型
使用了32位无符号的数据类型变量来存储事件标志,但其中高8位作存储事件标志组的控制信息,低24位作存储事件标志,所以说一个事件组最多可以存储24个事件标志。
如下图1:
图1
3.4、事件标志组与队列、信号量区别
1)
名称:队列、信号量
唤醒对象:事件发生时,只会唤醒一个任务
事件清除:是消耗型的资源,队列数据被读取后就消失了,信号量被读取后就减少了
2)
名称:事件标志组
唤醒对象:事件发生时,所有符合条件的任务都会被唤醒
事件清除:被唤醒的任务由两个选择,可以保留不动,也可以清除事件
四、事件标志组相关API函数
4.1、常用的API函数
如下图2:
图2
4.2、动态创建事件标志组函数
函数名称:EventGroupHandle_t xEventGroupCreate(void);
返回值:
返回,NULL,含义:事件标志组创建失败
返回,其他值,含义:事件标志组创建成功,返回句柄
4.3、清除事件标志位函数
函数名称:EventBits_t xEventGroupClearBits(EventGroupHandle_t xEventGroup
const EventBits_t uxBitsToClear);
参数:
名称:xEventGroup,含义:待操作的事件标志组句柄
名称:uxBitsToClear,含义:待清零的事件标志位
返回值:
返回,整数,含义:清零事件标志组之前,事件组中事件标志位的值
4.4、设置事件标志位函数
函数名称:EventBits_t xEventGroupSetBits(EventGroupHandle_t xEventGroup
const EventBits_t uxBitsToSet);
参数:
名称:xEventGroup,含义:待操作的事件标志组句柄
名称:uxBitsToSet,含义:待设置的事件标志位
返回值:
返回,整数,含义:事件组中事件标志位的值
4.5、等待事件标志位函数
函数名称:EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup,
const EventBits_t uxBitsToWaitFor,
const BaseType_t xClearOnExit,
const BaseType_t xWaitForAllBits,
const TickType_t xTicksToWait );
参数:
名称,xEvenrGroup,含义:等待的事件标志组句柄
名称,uxBitsToWaitFor,含义:等待的事件标志位,可以用逻辑或等待多个事件标志位
名称,xClearOnExit,含义:成功等待到事件标志位后,清除事件组中对应的事件标志位,
pdTRUE :清除uxBitsToWaitFor指定位;
pdFALSE:不清除名称,xWaitForAllBits,含义:等待uxBitsToWaitFor中的所有事件标志位(逻辑与)
pdTRUE:等待的位,全部为1
pdFALSE:等待的位,某个为1名称,xTicks ToWait,含义:等待的阻塞时间
返回值:
返回,等待的事件标志位,含义:等待事件标志位成功,返回等待到的事件标志位
返回,其它值,含义:等待事件标志位失败,返回事件组中的事件标志位