#ifdef ESP32
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#define TASK_STACK_SIZE (4096)
#endif
#ifdef defined(__AVR_ATmega328P__)
#include <Arduino_FreeRTOS.h>
#define TASK_STACK_SIZE (128)
#endif
#define NUM_TASKS (2)
#define TASK_PRIORITY (2)
const char *TASK_NAMES[] = {"T0","T1"};
const uint32_t LED_PINS[] = {2,4};
TaskHandle_t taskHandles[ NUM_TASKS ];
void task(void *parameter) {
uint32_t id = (uint32_t)parameter;
uint32_t state = 0;
pinMode( LED_PINS[id], OUTPUT );
vTaskDelay( pdMS_TO_TICKS(1) );
while (1) {
digitalWrite( LED_PINS[id], state ^=1 );
taskYIELD();
}
}
void setup() {
Serial.begin(115200);
#ifdef ESP32
Serial.printf( "Main Task running on Core %u\n", xPortGetCoreID());
#endif
for (uint32_t i=0; i < NUM_TASKS; i++) {
#ifdef ESP32
xTaskCreatePinnedToCore(task,TASK_NAMES[i], TASK_STACK_SIZE, (void*)i,
TASK_PRIORITY, &taskHandles[i], 0);
#else
xTaskCreate(task,TASK_NAMES[i], TASK_STACK_SIZE, (void*)i,
TASK_PRIORITY, &taskHandles[i] );
#endif
}
}
void loop() {}