#include <Arduino.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
// Usamos solo core 1 para la demo (es más sencillo)
#if CONFIG_FREERTOS_UNICORE
static const BaseType_t app_cpu = 0;
#else
static const BaseType_t app_cpu = 1;
#endif
#define LED_PIN 2
// mi tarea
void toggleLED(void *pvParameters)
{
while(true)
{
digitalWrite(LED_PIN, HIGH);
vTaskDelay( 500 / portTICK_PERIOD_MS );
digitalWrite(LED_PIN, LOW);
vTaskDelay( 500 / portTICK_PERIOD_MS );
}
}
void setup()
{
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, HIGH);
xTaskCreatePinnedToCore(
toggleLED,
"Toggle LED", // Nombre de la tarea
1024, // Tamaño de la pila de la tarea (bytes en ESP32, words en FreeRTOS)
NULL, // parámetro para pasar a memoria a función
1, // Prioridad (0 a configMAX_PRIORITIES - 1). En ESP32 de 0 a 25
NULL, // task handle
app_cpu); // ejecuta en un core (solo para demo con ESP32)
// si usáramos VAnilla FreeRTOS, habría que llamar vTaskStartScheduler()
// en main() después de configurar las tareas
// en ESP32 esta función ya se ha llamado automáticamente antes del setup()
}
void loop()
{
// Do nothing
// setup() and loop() run in their own task with priority 1 in core 1
// on ESP32
}