#include <Arduino.h>
#include <Arduino_FreeRTOS.h>
#include <task.h>
// Định nghĩa các TaskHandle
TaskHandle_t HTask1, HTask2;
// Biến cờ để kiểm soát việc đình chỉ Task1
volatile bool task1Suspended = false;
// Tác vụ Task1: In ra "Hello, world!" 5 lần
void Task1(void* pvParameters) {
for (int i = 0; i < 5; i++) {
Serial.println("Hello, world!");
vTaskDelay(pdMS_TO_TICKS(1000)); // Delay 1 giây
}
// Sau 5 lần in, task này sẽ đình chỉ Task2
task1Suspended = true;
vTaskSuspend(NULL); // Đình chỉ chính Task1
}
// Tác vụ Task2: In ra "Bye Task1" và đình chỉ Task1 trong 10 giây
void Task2(void* pvParameters) {
while (1) {
if (task1Suspended) {
Serial.println("Bye Task1");
// Đình chỉ Task1 trong 10 giây
vTaskDelay(pdMS_TO_TICKS(10000)); // Delay 10 giây
// Đánh dấu lại trạng thái Task1 có thể chạy lại
task1Suspended = false;
// Đánh thức Task1 (để Task1 tiếp tục in "Hello, world!")
vTaskResume(HTask1);
}
vTaskDelay(pdMS_TO_TICKS(1000)); // Delay 1 giây
}
}
void setup() {
// Khởi tạo Serial Monitor
Serial.begin(9600);
// Tạo các tác vụ với mức ưu tiên bằng nhau
xTaskCreate(Task1, "Task1", 250, NULL, tskIDLE_PRIORITY + 1, &HTask1);
xTaskCreate(Task2, "Task2", 250, NULL, tskIDLE_PRIORITY + 1, &HTask2);
// In ra mức ưu tiên của các tác vụ
Serial.print("Mức ưu tiên Task1: ");
Serial.println(uxTaskPriorityGet(HTask1));
Serial.print("Mức ưu tiên Task2: ");
Serial.println(uxTaskPriorityGet(HTask2));
}
void loop() {
// FreeRTOS sẽ quản lý việc chạy các tác vụ
}