esp32 消息队列如何传递字符串
时间: 2023-07-26 14:08:16 浏览: 142
ESP32的消息队列可以使用结构体来传递字符串。下面是一个示例代码,展示了如何创建一个消息队列,并向其中添加一个字符串类型的消息。
```c
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#define QUEUE_LENGTH 10
#define ITEM_SIZE sizeof(char*)
QueueHandle_t xQueue;
void sender_task(void *pvParameter)
{
char *message = "Hello, world!";
while(1) {
xQueueSend(xQueue, (void *)&message, portMAX_DELAY);
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
void receiver_task(void *pvParameter)
{
char *buffer;
while(1) {
xQueueReceive(xQueue, &buffer, portMAX_DELAY);
printf("%s\n", buffer);
}
}
void app_main()
{
xQueue = xQueueCreate(QUEUE_LENGTH, ITEM_SIZE);
xTaskCreate(sender_task, "sender_task", 2048, NULL, 5, NULL);
xTaskCreate(receiver_task, "receiver_task", 2048, NULL, 5, NULL);
}
```
在这个示例中,我们将一个字符串指针传递给消息队列。在发送任务中,我们创建一个指向字符串的指针,并将其传递给 `xQueueSend()` 函数。在接收任务中,我们声明一个指向字符指针的变量,并在 `xQueueReceive()` 函数中传递该变量的地址,以便在接收到消息时填充该变量。注意,我们的字符串指针是通过 `&` 运算符传递给 `xQueueReceive()` 的,因为我们需要在任务中修改该变量的值。
阅读全文