一、队列集
一个队列只允许任务间传递的消息为
同一种数据类型
,如果需要在任务间
传递不同数据类型的消息
时,那么就可以使用队列集
作用:用于对多个队列或信号量进行“监听”(接收或获取),其中
不管哪一个消息到来
,都可让任务
退出阻塞状态
例如:
接收任务A( )
{
等待接收队列;
获取信号量 ;
}
接收任务B( )
{
等待队列集中消息;
if(队列还是信号量) ;
… …
}
当任务A既要接收队列信号,又要获取信号量时,如果队列为空,则任务阻塞,即使拥有信号量,也无法获取到;如果成功获取队列中的数据,而未获取到信号量时,依然会被阻塞
而使用队列集的任务B,不论哪一个消息的到来,都可以使任务退出阻塞状态
二、队列集的相关API函数
函数 | 描述 |
xQueueCreateSet() | 创建队列集 |
xQueueAddToSet() | 队列添加到队列集中 |
xQueueRemoveFromSet() | 从队列集中移除队列 |
xQueueSelectFromSet() | 获取队列集中有有效消息的队列 |
xQueueSelectFromSetFromISR() | 在中断中获取队列集中有有效消息的队列 |
2.1 创建队列集
使用条件:configUSE_QUEUE_SETS 设置为 1
2.2 添加至队列集
加入队列集的队列,不能含有有效消息,即队列为空
2.3 从队列中移出
移出队列集的队列,不能含有有效消息,即队列为空
2.4 获取有有效消息的队列
三、队列集使用流程
1、启用队列集功能需要将宏configUSE_QUEUE_SETS 配置为 1
2、创建队列集
3、创建队列或信号量
4、往队列集中添加队列或信号量
5、往队列发送信息或释放信号量
6、获取队列集的消息