TaskHandle_t xHandle = NULL;
TaskHandle_t xHandle1 = NULL;
typedef struct struct_queue
{
char id;
char name;
} struct_queue_t;
void vTaskCode(void *pvParam)
{
QueueHandle_t QHandle;
QHandle = (QueueHandle_t)pvParam;
BaseType_t xStates;
char *pstr_seng;
int i = 0;
while (1)
{
pstr_seng = (char *)malloc(50);
snprintf(pstr_seng, 50, "xstruct 888 666 888 %d \r\n", i++);
xStates = xQueueSend(QHandle, &pstr_seng, 0); // 在队列中发布项目
if (xStates != pdPASS)
{
printf("sendno\n");
}
else
{
printf("sendok\n");
}
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
void vTaskCode1(void *pvParam)
{
QueueHandle_t QHandle;
QHandle = (QueueHandle_t)pvParam;
BaseType_t xStates;
char *pstr_seng;
while (1)
{
if (uxQueueMessagesWaiting(QHandle) != 0)
{
xStates = xQueueReceive(QHandle, &pstr_seng, 0); // 通过复制接收
if (xStates != pdPASS)
{
printf("receiveno\n");
}
else
{
printf("idpstr= %s\n", pstr_seng);
}
free(pstr_seng);//释放内存
}
else
{
printf("Message_NULL\n");
}
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
void app_main(void)
{
QueueHandle_t QHandle;
QHandle = xQueueCreate(5, sizeof(char *)); // 创建队列,返回队列的句柄
if (QHandle != 0)
{
printf("TEST_QHandle_ok\n");
xTaskCreate(
vTaskCode, // 任务函数
"Ttask", // 名字
4096, // 分配内存
(void *)QHandle, // 传参数
1, // 任务优先级
&xHandle); // 句柄
xTaskCreate(
vTaskCode1, // 任务函数
"Rtask1", // 名字
4096, // 分配内存
(void *)QHandle, // 传参数
2, // 任务优先级
&xHandle1); // 句柄
}
else
{
printf("TEST_QHandle_no\n");
}
}