#include <stdio.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "esp_system.h"
typedef struct {
uint32_t id;
uint32_t gpio;
uint32_t delay; //ms
} PARAM;
static PARAM param1 = { 1, GPIO_NUM_13, 200 };
static PARAM param2 = { 2, GPIO_NUM_12, 300 };
static PARAM param3 = { 3, GPIO_NUM_14, 400 };
static PARAM param4 = { 4, GPIO_NUM_27, 500 };
static PARAM param5 = { 5, GPIO_NUM_5, 600 };
static PARAM param6 = { 6, GPIO_NUM_17, 700 };
static PARAM param7 = { 7, GPIO_NUM_16, 800 };
static PARAM param8 = { 8, GPIO_NUM_4, 900 };
static void task1(void* const pvParameters) {
PARAM *param = pvParameters;
gpio_set_direction(param->gpio, GPIO_MODE_OUTPUT);
int state = 0;
while (true) {
printf("[%09ld] Running task %ld, core: %d, state: %d\n",
xTaskGetTickCount() * portTICK_PERIOD_MS,
param->id,
xPortGetCoreID(),
state);
gpio_set_level(param->gpio, state = !state);
vTaskDelay(param->delay / portTICK_PERIOD_MS);
}
vTaskDelete(NULL);
}
void app_main(void) {
printf("Hello, Wokwi!\n");
vTaskSuspendAll();
xTaskCreate(&task1, "task1", 2048, ¶m1, 1, NULL);
xTaskCreate(&task1, "task2", 2048, ¶m2, 1, NULL);
xTaskCreate(&task1, "task3", 2048, ¶m3, 1, NULL);
xTaskCreate(&task1, "task4", 2048, ¶m4, 1, NULL);
xTaskCreate(&task1, "task5", 2048, ¶m5, 1, NULL);
xTaskCreate(&task1, "task6", 2048, ¶m6, 1, NULL);
xTaskCreate(&task1, "task7", 2048, ¶m7, 1, NULL);
xTaskCreate(&task1, "task8", 2048, ¶m8, 1, NULL);
xTaskResumeAll();
while (true) {
vTaskDelay(10000 / portTICK_PERIOD_MS);
}
}