Thumbnail for video 'Programming ESP32 with Arduino - How to Multitask with FreeRTOS?'

← Back to courses

How to Multitask with FreeRTOS?

Run multiple tasks on the ESP32 with FreeRTOS. For instance: blinking two LED's at different intervals or increment two counters at the same time.

A FreeRTOS task is nothing more than a standard C (or C++) function. Nothing fancy, very easy!

Most ESP32's have a dual-core processor, so FreeRTOS will balance your tasks across cores. This technique also works for single-core versions of the ESP32. In that case, FreeRTOS will rapidly switch between tasks, giving the impression that it's multitasking.

Full code

int count1 = 0;
int count2 = 0;

void task1(void * parameters){
for(;;){ // infinite loop
Serial.print("Task 1 counter: ");
Serial.println(count1++);
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}

void task2(void * parameters){
for(;;){ // infinite loop
Serial.print("Task 2 counter: ");
Serial.println(count2++);
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}

void setup(){
xTaskCreate(
task1, // Function that should be called
"Task 1", // Name of the task (for debugging)
1000, // Stack size (bytes)
NULL, // Parameter to pass
1, // Task priority
NULL // Task handle
);

xTaskCreate(
task2, // Function that should be called
"Task 2", // Name of the task (for debugging)
1000, // Stack size (bytes)
NULL, // Parameter to pass
1, // Task priority
NULL // Task handle
);
}

void loop(){}

Useful resources