#include <Arduino_FreeRTOS.h>
#include <queue.h>
QueueHandle_t queue;
TaskHandle_t HTask1;
TaskHandle_t HTask2;
void setup() {
Serial.begin(9600);
queue = xQueueCreate(3, sizeof(char *));
if (queue != NULL) {
xTaskCreate(Task1, "Task1", 250, NULL, 1, &HTask1);
xTaskCreate(Task2, "Task2", 250, NULL, 1, &HTask2);
vTaskStartScheduler();
} else {
Serial.println("Error creating the queue");
}
}
void loop() {}
void Task1(void *pvParameters) {
char *string1 = "Tek4.vn";
char *string2 = "Arduino";
char *string3 = "FreeRTOS";
xQueueSendToFront(queue, &string1, 0);
xQueueSendToFront(queue, &string2, 0);
xQueueSendToFront(queue, &string3, 0);
vTaskDelete(NULL);
}
void Task2(void *pvParameters) {
char *pcReceivedString;
for (int i = 0; i < 4; i++) {
int messageWaiting = uxQueueMessagesWaiting(queue);
Serial.print("So luong phan tu trong hang doi: ");
Serial.println(messageWaiting);
int emptySpaces = uxQueueSpacesAvailable(queue);
Serial.print("Khoang trong: ");
Serial.println(emptySpaces);
Serial.print("Du lieu nhan: ");
xQueueReceive(queue, &pcReceivedString, 5);
Serial.println(pcReceivedString);
}
vTaskDelete(NULL);
}