/*
* @Author Giang Hoang CT050413
*/
#include <Arduino_FreeRTOS.h>
#include <queue.h>
#include <semphr.h>
SemaphoreHandle_t xSemaphore;
// Định nghĩa các task
void Task1(void *pvParameters);
void Task2(void *pvParameters);
void setup() {
Serial.begin(9600);
xSemaphore = xSemaphoreCreateCounting(1, 1); // Max =1 & initial = 1
xTaskCreate(Task1,"Task 1",128,NULL,1,NULL);
xTaskCreate(Task2,"Task 2",128,NULL,1,NULL);
// Bắt đầu RTOS scheduler
vTaskStartScheduler();
}
void loop() {
// no-op
}
void Task1(void *pvParameters) {
(void) pvParameters;
for (;;) {
if (xSemaphoreTake(xSemaphore, portMAX_DELAY) == pdTRUE) {
Serial.println("task 1 is running and using serial");
vTaskDelay(10 / portTICK_PERIOD_MS);
xSemaphoreGive(xSemaphore);
vTaskDelay(10 / portTICK_PERIOD_MS);
}
}
}
void Task2(void *pvParameters) {
(void) pvParameters;
for (;;) {
if (xSemaphoreTake(xSemaphore, portMAX_DELAY) == pdTRUE) {
Serial.println("task 2 is running and using serial");
vTaskDelay(10 / portTICK_PERIOD_MS);
xSemaphoreGive(xSemaphore);
vTaskDelay(10 / portTICK_PERIOD_MS);
}
}
}