/*============================================================================================
This is basic FreeRTOS tutorial where a task is created, suspended, resumed and deleted
Using ESP32
*/
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include "driver/gpio.h"
#define LED1 4
const TickType_t Delay = 300 / portTICK_PERIOD_MS;
int counter =0;
/*============ TAsk Handler==========================================*/
TaskHandle_t LED1Task =NULL;
// Fucntoin to be performed task 1 is called
void LED1_Task(void *param){
for(;;){
digitalWrite(LED1, HIGH);
vTaskDelay(250/portTICK_RATE_MS);
digitalWrite(LED1, LOW);
vTaskDelay(250/portTICK_RATE_MS);
}
}
/*============ TAsk Handler==========================================*/
TaskHandle_t LED_BUILTIN_Task = NULL;
// Fucntoin to be performed task 1 is called
void LEDBUILTIN_Task(void *pvParameters ){
while (1){
counter ++;
digitalWrite(LED_BUILTIN, HIGH);
vTaskDelay(Delay);
digitalWrite(LED_BUILTIN, LOW);
vTaskDelay(Delay);
if(counter ==3){
vTaskSuspend(LED_BUILTIN_Task);
Serial.println("LED_BUILTIN SUSPENDED");
}
if(counter == 8){
vTaskResume(LED_BUILTIN_Task);
Serial.println("LED_BUILTIN RESUMED");
}
if (counter ==12){
vTaskDelete(LED_BUILTIN_Task);
Serial.println("LED_BUILTIN Deleted");
}
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32 with FreeRTOS");
pinMode(LED1, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
xTaskCreatePinnedToCore(LED1_Task, "LED1_Task", 4000, NULL, 5, &LED1Task, 0);
xTaskCreatePinnedToCore(LEDBUILTIN_Task, "LEDBUILTIN_Task", 4000, NULL, 5, &LED_BUILTIN_Task, 1);
}