FreeRTOS——队列集

一、队列集 

        一个队列只允许任务间传递的消息为 同一种数据类型 ,如果需要在任务间 传递不同数据类型的消息 时,那么就可以使用队列集 
作用:用于对多个队列或信号量进行“监听”(接收或获取),其中 不管哪一个消息到来 ,都可让任务 退出阻塞状态
例如:
接收任务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、获取队列集的消息

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值