文章目录
- 用途
- 创建队列集
- 把队列加入队列集
- 读取队列集
用途
一个任务可能需要从多个不同的数据源接收数据,如果没有队列集,任务需要在多个队列之间进行轮询,可能导致任务在某些情况下无法及时响应。使用队列集,任务可以以阻塞的方式等待这队列中的任意一个有数据到来,而不需要分别对每个队列进行轮询。队列集本质上也是一个队列
创建队列集
QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength )
参数 | 说明 |
---|---|
uxQueueLength | 队列集长度,最多能存放多少个数据(队列句柄) |
返回值 | 非 0:成功,返回句柄,以后使用句柄来操作队列 NULL:失败,因为内存不足 |
把队列加入队列集
BaseType_t xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore,
QueueSetHandle_t xQueueSet );
参数 | 说明 |
---|---|
xQueueOrSemaphore | 队列或信号量句柄,即要加入队列集的对象 |
xQueueSet | 队列集句柄 |
返回值 | pdTRUE:表示将队列或信号量成功加入队列集 pdFALSE:表示加入操作失败 |
读取队列集
QueueSetMemberHandle_t xQueueSelectFromSet( QueueSetHandle_t xQueueSet,
TickType_t const xTicksToWait );
参数 | 说明 |
---|---|
xQueueSet | 用于标识要操作的队列集的句柄 |
xTicksToWait | 控制任务在队列集为空时的阻塞行为,以时钟节拍数为单位。0 表示不阻塞直接返回,portMAX_DELAY 表示一直阻塞直到有数据,其他值则阻塞指定的时钟节拍数 |
返回值 | NULL 代表操作失败;返回有效的队列句柄则表示成功从队列集中获取到有数据的队列 |