TaskHandle_t xHandle = NULL;
TaskHandle_t xHandle1 = NULL;
void vTaskCode(void *pvParam)
{
QueueHandle_t QHandle;
QHandle = (QueueHandle_t)pvParam;
BaseType_t xStates;
int i = 666;
while (1)
{
xStates = xQueueSend(QHandle, &i, 0); // 在队列中发布项目
if (xStates != pdPASS)
{
printf("sendno\n");
}
else
{
printf("sendok\n");
}
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
void vTaskCode0(void *pvParam)
{
QueueHandle_t QHandle;
QHandle = (QueueHandle_t)pvParam;
BaseType_t xStates;
int i = 888;
while (1)
{
xStates = xQueueSend(QHandle, &i, 0); // 在队列中发布项目
if (xStates != pdPASS)
{
printf("sendno0\n");
}
else
{
printf("sendok0\n");
}
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
void vTaskCode1(void *pvParam)
{
QueueSetHandle_t xQueueSet;
xQueueSet = (QueueSetHandle_t)pvParam;
BaseType_t xStates;
QueueSetMemberHandle_t idata;
int i1;
while (1)
{
idata = xQueueSelectFromSet(xQueueSet, portMAX_DELAY); // 将返回 队列集中包含数据的队列
xStates = xQueueReceive(idata, &i1, portMAX_DELAY); // 通过复制接收,因此必须提供足够大小的缓冲区
if (xStates != pdPASS)
{
printf("receiveno\n");
}
else
{
printf("idpstr= %d\n", i1);
}
}
}
void app_main(void)
{
QueueHandle_t QHandle;
QueueHandle_t QHandle1;
QHandle = xQueueCreate(5, sizeof(int)); // 创建队列,返回队列的句柄
QHandle1 = xQueueCreate(5, sizeof(int)); // 创建队列,返回队列的句柄
QueueSetHandle_t xQueueSet;
xQueueSet = xQueueCreateSet(10); // 创建队列集
xQueueAddToSet(QHandle, xQueueSet); // 添加到队列集
xQueueAddToSet(QHandle1, xQueueSet); // 添加到队列集
if (QHandle != NULL && QHandle1 != NULL && xQueueSet != NULL)
{
printf("TEST_QHandle_ok\n");
xTaskCreate(
vTaskCode, // 任务函数
"Ttask", // 名字
4096, // 分配内存
(void *)QHandle, // 传参数
1, // 任务优先级
&xHandle); // 句柄
xTaskCreate(
vTaskCode0, // 任务函数
"Ttask0", // 名字
4096, // 分配内存
(void *)QHandle1, // 传参数
1, // 任务优先级
&xHandle); // 句柄
xTaskCreate(
vTaskCode1, // 任务函数
"Rtask1", // 名字
4096, // 分配内存
(void *)xQueueSet, // 传参数
2, // 任务优先级
&xHandle1); // 句柄
}
else
{
printf("TEST_QHandle_no\n");
}
}