FreeRTOS队列集、事件标志组 | FreeRTOS十一

目录

说明:

一、队列集

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:

FreeRTOS队列集、事件标志组 | FreeRTOS十一_第1张图片

 图1

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

1)

名称:队列、信号量

唤醒对象:事件发生时,只会唤醒一个任务

事件清除:是消耗型的资源,队列数据被读取后就消失了,信号量被读取后就减少了

2)

名称:事件标志组

唤醒对象:事件发生时,所有符合条件的任务都会被唤醒

事件清除:被唤醒的任务由两个选择,可以保留不动,也可以清除事件

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

4.1、常用的API函数

如下图2:

FreeRTOS队列集、事件标志组 | FreeRTOS十一_第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,含义:等待的阻塞时间

返回值:

返回,等待的事件标志位,含义:等待事件标志位成功,返回等待到的事件标志位

返回,其它值,含义:等待事件标志位失败,返回事件组中的事件标志位

你可能感兴趣的:(嵌入式,单片机,stm32)