队列集简介
- 一个队列只允许任务间传递的消息为同一种数据类型,如果需要在任务间传递不同数据类型的消息时,那么就可以使用队列集 !
- 作用:用于对多个队列或信号量进行“监听”,其中不管哪一个消息到来,都可让任务退出阻塞状态
函数
/**
* @brief 此函数用于创建队列集
* @param uxEventQueueLength:队列集可容纳的队列数量
* @retval 返回创建成功的队列集句柄,如果返回NULL则表示内存不足无法创建
*/
QueueSetHandle_t xQueueCreateSet(const UBaseType_t uxEventQueueLength)
/**
* @brief 此函数用于往队列集中添加队列,要注意的时,队列在被添加到队列集之前,队列中不能有有效的消息
* @param xQueueOrSemaphore:待添加的队列句柄
* @param xQueueSet:队列集
* @retval pdPASS 队列集添加队列成功,pdFAIL 队列集添加队列失败
*/
BaseType_t xQueueAddToSet(QueueSetMemberHandle_t xQueueOrSemaphore,
QueueSetHandle_t xQueueSet)
/**
* @brief 此函数用于从队列集中移除队列, 要注意的是,队列在从队列集移除之前,必须没有有效的消息
* @param xQueueOrSemaphore:待移除的队列句柄
* @param xQueueSet:队列集
* @retval pdPASS 队列集移除队列成功,pdFAIL 队列集移除队列失败
*/
BaseType_t xQueueRemoveFromSet(QueueSetMemberHandle_t xQueueOrSemaphore,
QueueSetHandle_t xQueueSet)
/**
* @brief 此函数用于在任务中获取队列集中有有效消息的队列
* @param xQueueSet:队列集
* @param xTicksToWait:阻塞超时时间
* @retval 返回消息的队列句柄,如果返回NULL则表示获取消息失败
*/
QueueSetMemberHandle_t xQueueSelectFromSet(QueueSetHandle_t xQueueSet,
TickType_t const xTicksToWait)
队列集使用流程
-
启用队列集功能需要将宏configUSE_QUEUE_SETS 配置为 1
-
创建队列集
-
创建队列或信号量
-
往队列集中添加队列或信号量
-
往队列发送信息或释放信号量
-
获取队列集的消息