#include <Arduino_FreeRTOS.h>
#include <semphr.h>
TaskHandle_t task1_handle;
SemaphoreHandle_t mutex;
void setup() {
Serial.begin(9600);
xTaskCreate(task1, "print task", 128, NULL, 1, &task1_handle);
xTaskCreate(task2, "print task", 128, NULL, 2, NULL);
mutex = xSemaphoreCreateMutex();
}
void loop()
{
// Empty. Things are done in Tasks.
}
void task1(void *pvParameters)
{
while(1){
Serial.print("priority of task 1 = ");
Serial.println(uxTaskPriorityGet(task1_handle ));
if (xSemaphoreTake(mutex, 10) == pdTRUE){
Serial.println("mutex taken by task 1, sleep for 3 seconds");
vTaskDelay( 3000 / portTICK_PERIOD_MS );
}
Serial.print("priority of task 1 = ");
Serial.println(uxTaskPriorityGet(task1_handle ));
Serial.println("delete task 1");
vTaskDelete(NULL);
}
}
void task2(void *pvParameters)
{
while(1){
Serial.println("block task 2 for 3 second allow task 1 to run");
vTaskDelay( 3000 / portTICK_PERIOD_MS );
Serial.println("task 2 try to take mutex");
xSemaphoreTake(mutex, portMAX_DELAY);
}
}