文章目录
- 前言
- 一、功能描述
- 二、功能实现
前言
在实际使用中我们可能要从多个队列中得到数据,就需要队列集。
一、功能描述
创建两个队列Queue1
、Queue2
。Task1往Queue1
写数据、Task2往Queue2
写数据。Task3使用QueueSet
监测这两个队列。
二、功能实现
- 创建两个队列
xQueueHandle1 = xQueueCreate(2, sizeof(int));if (xQueueHandle1 == NULL){printf("can not create queue1\r\n");}xQueueHandle2 = xQueueCreate(2, sizeof(int));if (xQueueHandle2 == NULL){printf("can not create queue2\r\n");}
- 创建队列集合 容量是队列1+队列2
xQueueSet = xQueueCreateSet(4);
- 把两个队列添加进QueueSet
xQueueAddToSet(xQueueHandle1, xQueueSet);xQueueAddToSet(xQueueHandle2, xQueueSet);
- 创建3个任务
void Task1Function(void * param)
{int i = 0;while (1){xQueueSend(xQueueHandle1, &i, portMAX_DELAY);i++;vTaskDelay(10);}
}void Task2Function(void * param)
{int i = -1;while (1){xQueueSend(xQueueHandle2, &i, portMAX_DELAY);i--;vTaskDelay(20);}
}void Task3Function(void * param)
{QueueSetMemberHandle_t handle;int i;while (1){/*1. read queue set: which queue has data*/handle = xQueueSelectFromSet(xQueueSet, portMAX_DELAY);/*2. read queue*/xQueueReceive(handle, &i, 0);/*3. printf */printf("get data : %d\r\n", i);}
}xTaskCreate(Task1Function, "Task1", 100, NULL, 1, &xHandleTask1);xTaskCreate(Task2Function, "Task2", 100, NULL, 1, NULL);xTaskCreate(Task3Function, "Task3", 100, NULL, 1, NULL);
运行结果