#include <STM32FreeRTOS.h>
#define LED1_PIN PA3
#define LED2_PIN PA4
#define LED3_PIN PA5
#define LED4_PIN PA6
void LED1code(void *pvParameters);
void LED2code(void *pvParameters);
void LED3code(void *pvParameters);
void LED4code(void *pvParameters);
// void MonitorTask(void *pvParameters);
TaskHandle_t xLED1Handle = NULL;
TaskHandle_t xLED2Handle = NULL;
TaskHandle_t xLED3Handle = NULL;
TaskHandle_t xLED4Handle = NULL;
void setup()
{
Serial.begin(115200);
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
pinMode(LED3_PIN, OUTPUT);
pinMode(LED4_PIN, OUTPUT);
xTaskCreate(LED1code, "LED1", 128, NULL, 1, &xLED1Handle);
xTaskCreate(LED2code, "LED2", 128, NULL, 1, &xLED2Handle);
xTaskCreate(LED3code, "LED3", 128, NULL, 1, &xLED3Handle);
xTaskCreate(LED4code, "LED4", 128, NULL, 1, &xLED4Handle);
// xTaskCreate(MonitorTask, "Monitor", 256, NULL, 2, NULL);
vTaskStartScheduler();
}
void LED1code(void *pvParameters)
{
(void) pvParameters;
TickType_t xLastWakeTime = xTaskGetTickCount();
const TickType_t xFrequency = pdMS_TO_TICKS(2000);
while(1)
{
digitalWrite(LED1_PIN, HIGH);
vTaskDelayUntil(&xLastWakeTime, xFrequency);
digitalWrite(LED1_PIN, LOW);
vTaskDelayUntil(&xLastWakeTime, xFrequency);
}
}
void LED2code(void *pvParameters)
{
(void) pvParameters;
TickType_t xLastWakeTime = xTaskGetTickCount();
const TickType_t xFrequency = pdMS_TO_TICKS(1000);
while(1)
{
digitalWrite(LED2_PIN, HIGH);
vTaskDelayUntil(&xLastWakeTime, xFrequency);
digitalWrite(LED2_PIN, LOW);
vTaskDelayUntil(&xLastWakeTime, xFrequency);
}
}
void LED3code(void *pvParameters)
{
(void) pvParameters;
TickType_t xLastWakeTime = xTaskGetTickCount();
const TickType_t xFrequency = pdMS_TO_TICKS(100);
while(1)
{
digitalWrite(LED3_PIN, HIGH);
vTaskDelayUntil(&xLastWakeTime, xFrequency);
digitalWrite(LED3_PIN, LOW);
vTaskDelayUntil(&xLastWakeTime, xFrequency);
}
}
void LED4code(void *pvParameters)
{
(void) pvParameters;
TickType_t xLastWakeTime = xTaskGetTickCount();
const TickType_t xFrequency = pdMS_TO_TICKS(500);
while(1)
{
digitalWrite(LED4_PIN, HIGH);
vTaskDelayUntil(&xLastWakeTime, xFrequency);
digitalWrite(LED4_PIN, LOW);
vTaskDelayUntil(&xLastWakeTime, xFrequency);
}
}
// void MonitorTask(void *pvParameters)
// {
// (void) pvParameters;
// const TickType_t xDelay = pdMS_TO_TICKS(2000);
// while(1)
// {
// Serial.println("--- Stack High Water Mark (Free Words Left) ---");
// if(xLED1Handle != NULL) Serial.printf("LED1 Task Free Stack: %d words\n", uxTaskGetStackHighWaterMark(xLED1Handle));
// if(xLED2Handle != NULL) Serial.printf("LED2 Task Free Stack: %d words\n", uxTaskGetStackHighWaterMark(xLED2Handle));
// if(xLED3Handle != NULL) Serial.printf("LED3 Task Free Stack: %d words\n", uxTaskGetStackHighWaterMark(xLED3Handle));
// if(xLED4Handle != NULL) Serial.printf("LED4 Task Free Stack: %d words\n", uxTaskGetStackHighWaterMark(xLED4Handle));
// Serial.println("-----------------------------------------------");
// vTaskDelay(xDelay);
// }
// }
void loop()
{}