#include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "esp_task_wdt.h" #include "Arduino.h" #if (ARDUINO_USB_CDC_ON_BOOT|ARDUINO_USB_MSC_ON_BOOT|ARDUINO_USB_DFU_ON_BOOT) #include "USB.h" #if ARDUINO_USB_MSC_ON_BOOT #include "FirmwareMSC.h" #endif #endif #ifndef ARDUINO_LOOP_STACK_SIZE #ifndef CONFIG_ARDUINO_LOOP_STACK_SIZE #define ARDUINO_LOOP_STACK_SIZE 8192 #else #define ARDUINO_LOOP_STACK_SIZE CONFIG_ARDUINO_LOOP_STACK_SIZE #endif #endif TaskHandle_t loopTaskHandle = NULL; #if CONFIG_AUTOSTART_ARDUINO #if CONFIG_FREERTOS_UNICORE void yieldIfNecessary(void){ static uint64_t lastYield = 0; uint64_t now = millis(); if((now - lastYield) > 2000) { lastYield = now; vTaskDelay(5); //delay 1 RTOS tick } } #endif bool loopTaskWDTEnabled; void loopTask(void *pvParameters) { setup(); for(;;) { #if CONFIG_FREERTOS_UNICORE yieldIfNecessary(); #endif if(loopTaskWDTEnabled){ esp_task_wdt_reset(); } loop(); if (serialEventRun) serialEventRun(); } } extern "C" void app_main() { #if ARDUINO_USB_CDC_ON_BOOT Serial.begin(); #endif #if ARDUINO_USB_MSC_ON_BOOT MSC_Update.begin(); #endif #if ARDUINO_USB_DFU_ON_BOOT USB.enableDFU(); #endif #if ARDUINO_USB_ON_BOOT USB.begin(); #endif loopTaskWDTEnabled = false; initArduino(); xTaskCreateUniversal(loopTask, "loopTask", ARDUINO_LOOP_STACK_SIZE, NULL, 1, &loopTaskHandle, ARDUINO_RUNNING_CORE); } #endif