#include <Arduino_FreeRTOS.h>
#include <queue.h>
QueueHandle_t xMailbox;
TaskHandle_t TaskHandle_1; // handler for Task1
TaskHandle_t TaskHandle_2; // handler for Task2
void setup() {
// Khởi tạo Serial một lần duy nhất
Serial.begin(9600);
// Tạo hộp thư (Mailbox)
xMailbox = xQueueCreate(1, sizeof(int32_t));
// Tạo Task 1 - Sender
xTaskCreate(vUpdateMailbox, "Sender", 100, NULL, 1, &TaskHandle_1);
// Tạo Task 2 - Receiver
xTaskCreate(vReadMailbox, "Receiver", 100, NULL, 1, &TaskHandle_2);
}
void loop() {
// Hàm loop() rỗng vì hai task chạy độc lập
}
// Hàm thực thi cho Task 1 (Sender)
void vUpdateMailbox(void) {
int32_t ulNewValue = 1;
while (1) {
// Ghi đè dữ liệu vào hộp thư
xQueueOverwrite(xMailbox, &ulNewValue);
Serial.println("Data written to mailbox");
ulNewValue++;
vTaskDelay(500);
}
}
// Hàm thực thi cho Task 2 (Receiver)
BaseType_t vReadMailbox(void) {
int32_t value_received;
while (1) {
// Đọc dữ liệu từ hộp thư (không xóa)
xQueuePeek(xMailbox, &value_received, portMAX_DELAY);
Serial.print("Data Read from mailbox = ");
Serial.println(value_received);
vTaskDelay(100);
}
}