typedef struct{
  uint16_t from_id;   // 2
  uint16_t to_id;     // 2
  uint8_t type;       // 1
  char data[20];      // 20
  char *p_data;       // 4
}Message;

QueueHandle_t queueMsg = xQueueCreate(8, sizeof(Message));   // 创建消息队列,长度为8,每条消息大小为20字节

// 模拟数据分发服务器动作
void server_task(void* param_t){
  char data[20]="This is message!";
  Message msg;
  msg.from_id=1;
  msg.to_id=100;
  msg.type=2;
  strcpy(msg.data, data);
  msg.p_data = data;

  if(xQueueSend(queueMsg, &msg, portMAX_DELAY) == pdPASS){
    printf("[SEND] 消息发送成功: 0x%p\n", &msg);
    printf("[SEND] data指针:0x%p\n",msg.data);
    printf("[SEND] p_data指针:0x%p\n",&msg.p_data);
    printf("[SEND] p_data值:0x%p\n",msg.p_data);
    printf("[SEND] data value :%s\n", msg.data);
  }
  vTaskDelete(NULL);
}

// 模拟客户端运算器,用于获取消息
void client_task(void* param_t){
  Message msg;
  if(xQueueReceive(queueMsg, &msg, portMAX_DELAY)==pdPASS){
    printf("[RECV] 消息接收完毕: 0x%p\n", &msg);
    printf("[RECV] data指针:0x%p\n",msg.data);
    printf("[RECV] p_data指针:0x%p\n",&msg.p_data);
    printf("[RECV] p_data值:0x%p\n",msg.p_data);
    printf("[RECV] data value :%s\n", msg.p_data);
  }
  vTaskDelete(NULL);
}

void setup() {
  Serial.begin(115200);
  Serial.println("Hello, ESP32-S3!");
  // 创建发送和接收任务
  xTaskCreate(server_task, "Sender", 1024 * 8, NULL, 1, NULL);
  xTaskCreate(client_task, "Receiver", 1024 * 8, NULL, 1, NULL);
}

void loop() {
  delay(10); 
}
esp:0
esp:1
esp:2
esp:3
esp:4
esp:5
esp:6
esp:7
esp:8
esp:9
esp:10
esp:11
esp:12
esp:13
esp:14
esp:15
esp:16
esp:17
esp:18
esp:19
esp:20
esp:21
esp:35
esp:36
esp:37
esp:38
esp:39
esp:40
esp:41
esp:42
esp:45
esp:46
esp:47
esp:48
esp:3V3.1
esp:3V3.2
esp:RST
esp:5V
esp:GND.1
esp:GND.2
esp:TX
esp:RX
esp:GND.3
esp:GND.4