ESP32-S开发 之 FreeRTOS Queue

本文基于ESP32-S开发 之 FreeRTOS Task

队列

1
vim main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <Arduino.h>

typedef struct Message {
portSTACK_TYPE id;
} Message_t;

xQueueHandle task1Queue;

void vTask1(void *pvParameters);
void vTask2(void *pvParameters);

void setup() {
task1Queue = xQueueCreate(5, sizeof(Message_t));

xTaskCreate(&vTask1, "Task 1", 2048, NULL, 1, NULL);
xTaskCreate(&vTask2, "Task 2", 2048, NULL, 1, NULL);
}

void loop() {
// implicit invocation of vTaskStartScheduler
}

void vTask1(void *pvParameters) {
Message_t rcvMessage;

for (;;) {
if (xQueueReceive(task1Queue, &rcvMessage, 1000)) {
printf("Task 1 rcv=%d from Task 2\n", rcvMessage.id);
}
}
}

void vTask2(void *pvParameters) {
Message_t sendMessage;
portSTACK_TYPE id = 0;

for (;;) {
sendMessage.id = id++;
xQueueSend(task1Queue, &sendMessage, 1000);

vTaskDelay(pdMS_TO_TICKS(1000));
}
}

esp32-s-freertos-queue-01.png

参考