ESP32: ESP32_xSemaphoreMutex.ino

File ESP32_xSemaphoreMutex.ino, 1.2 KB (added by krit, 3 years ago)
Line 
1#include<Arduino.h>
2
3SemaphoreHandle_t sem_printer;
4
5void Printer(String value){
6  Serial.println(value);
7}
8
9void print1Task(void *pvParameters){
10  int i;
11  while(true){
12    // critical LOCK resource
13    if ( xSemaphoreTake(sem_printer, 2000) == pdTRUE ){
14      Printer("Print form print1Task...");
15        xSemaphoreGive(sem_printer);
16    // UNLOCK resource
17    }else{
18      Serial.println("print1Task failed to get access Printer");
19    }
20    vTaskDelay(2000);
21  }
22}
23
24void print2Task(void *pvParameters){
25  while(true){
26    // critical LOCK resource
27    if ( xSemaphoreTake(sem_printer, 5000) == pdTRUE ){
28      Printer("Print form print2Task...");
29      // 1 experiment to lock mutex and not give will cause print1Task cannot access printer
30      //vTaskDelay(5000);
31      xSemaphoreGive(sem_printer);
32    // UNLOCK resource
33    }else{
34      Serial.println("print2Task failed to get access Printer");
35    }
36    vTaskDelay(2000);
37
38  }
39}
40
41void setup() {
42  Serial.begin(115200);
43  sem_printer = xSemaphoreCreateMutex();
44  xTaskCreate(print1Task, "print1Task", 1024, NULL, 1, NULL);
45  xTaskCreate(print2Task, "print2Task", 1024, NULL, 0, NULL);
46}
47
48void loop() {
49  // put your main code here, to run repeatedly:
50}