FreeRTOS学习 --- 队列集
队列集简介
一个队列只允许任务间传递的消息为同一种数据类型,如果需要在任务间传递不同数据类型的消息时,那么就可以使用队列集 !
作用:用于对多个队列或信号量进行“监听”,其中不管哪一个消息到来,都可让任务退出阻塞状态
假设:有个接收任务,使用到队列集接收和信号量的获取,如下:
接收任务( )
{
等待队列集中消息;
if(队列还是信号量) ;
… …
}
队列集相关API函数介绍
函数 | 描述 |
xQueueCreateSet() | 创建队列集 |
xQueueAddToSet() | 队列添加到队列集中 |
xQueueRemoveFromSet() | 从队列集中移除队列 |
xQueueSelectFromSet() | 获取队列集中有有效消息的队列 |
xQueueSelectFromSetFromISR() | 在中断中获取队列集中有有效消息的队列 |
创建队列集函数:
QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength );
此函数用于创建队列集。
往队列集中添加队列函数:
BaseType_t xQueueAddToSet( 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 )
此函数用于在任务中获取队列集中有有效消息的队列
队列集使用流程
1、启用队列集功能需要将宏configUSE_QUEUE_SETS 配置为 1
2、创建队列集
3、创建队列或信号量
4、往队列集中添加队列或信号量
5、往队列发送信息或释放信号量
6、获取队列集的消息