队列集定义:def
队列集只允许任务间传递消息为同一种数据类型,如果需要在任务间传递不同数据类型的消息时,就可以使用队列集。
用于对多个信号量进行监听,其中不管哪一个消息到来,都可以让任务退出阻塞状态
假设:有一个接收任务,使用到队列的接收和信号量的获取如下所示:
队列集相关API函数简介
创建队列集:
QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength );
该函数用于创建队列集:
形参 | 描述 |
uxEventQueueLength | 队列集可容纳的队列数 |
队列集的返回值:
返回值 | 描述 |
NULL | 队列集创建失败 |
其他值 | 队列集创建成功,返回队列句柄 |
队列集中添加队列:
xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore , QueueSetHandle_t xQueueSet);
该函数用于往队列中添加队列集,注意,队列在被添加到队列集之前,队列中不能有有效消息。
形参 | 描述 |
xQueueOrSemaphore | 待添加的队列句柄 |
xQueueSet | 队列集 |
返回值 | 描述 |
pdPASS | 队列集添加队列成功 |
pdFALL | 队列集添加队列失败 |
队列集中移除队列:
BaseType_t xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore,QueueSetHandle_t xQueueSet );
BaseType_t xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore,QueueSetHandle_t xQueueSet );
此函数用于从队列集中移除队列,要注意的是,队列在从队列集移除之前,必须没有有效消息
获取有效消息队列:
QueueSetMemberHandle_t xQueueSelectFromSet( QueueSetHandle_t xQueueSet , TickType_t const xTicksToWait);
QueueSetMemberHandle_t xQueueSelectFromSet( QueueSetHandle_t xQueueSet , TickType_t const xTicksToWait);
此函数用于在任务重获取队列中有效消息的队列
队列集操作实验
队列集使用流程
-
1:启用队列集功能需将宏configUSE_QUEUE_SETS 配置为1
-
2:创建队列集
-
3:创建队列集或信号量
-
4:往队列集中添加队列或信号量
-
5:往队列发送消息或释放信号量
-
6:获取队列集消息
..........................查看课堂源码实现队列集功能..................................