#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#define TEST_CASE (0) // Test Cases: 0,1,2
#define NUM_TASKS (2)
const char *TASK_NAMES[] = {"T0","T1"};
const uint32_t LED_PINS[] = {2,4};
TaskHandle_t taskHandles[ NUM_TASKS ];
SemaphoreHandle_t mutex_lock = NULL;
void task(void *parameter) {
uint32_t id = (uint32_t)parameter;
uint32_t state = 0;
pinMode( LED_PINS[id], OUTPUT );
if (id == 0) {
if (TEST_CASE !=0 ) {
vTaskDelay(2000/ portTICK_PERIOD_MS);
}
} else {
if (TEST_CASE == 2) {
pdMS_TO_TICKS(1000);
vTaskSuspend( taskHandles[0] );
}
}
while (1) {
if (xSemaphoreTake(mutex_lock, portMAX_DELAY) == pdTRUE) {
digitalWrite( LED_PINS[id], state ^= 1);
//Serial.printf("Task Id=%u running @%lu msec\n", id, millis() );
vTaskDelay( 200/portTICK_PERIOD_MS );
xSemaphoreGive(mutex_lock);
}
}
}
void setup() {
Serial.begin(115200);
mutex_lock = xSemaphoreCreateMutex();
for (uint32_t i=0; i < NUM_TASKS; i++) {
xTaskCreate(task,TASK_NAMES[i], 4096, (void*)i,
NUM_TASKS-i, &taskHandles[i] );
}
}
void loop() {}