main.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include "freertos/FreeRTOS.h"
  2. #include "freertos/task.h"
  3. #include "esp_task_wdt.h"
  4. #include "Arduino.h"
  5. #if (ARDUINO_USB_CDC_ON_BOOT|ARDUINO_USB_MSC_ON_BOOT|ARDUINO_USB_DFU_ON_BOOT) && !ARDUINO_USB_MODE
  6. #include "USB.h"
  7. #if ARDUINO_USB_MSC_ON_BOOT
  8. #include "FirmwareMSC.h"
  9. #endif
  10. #endif
  11. #ifndef ARDUINO_LOOP_STACK_SIZE
  12. #ifndef CONFIG_ARDUINO_LOOP_STACK_SIZE
  13. #define ARDUINO_LOOP_STACK_SIZE 8192
  14. #else
  15. #define ARDUINO_LOOP_STACK_SIZE CONFIG_ARDUINO_LOOP_STACK_SIZE
  16. #endif
  17. #endif
  18. TaskHandle_t loopTaskHandle = NULL;
  19. #if CONFIG_AUTOSTART_ARDUINO
  20. #if CONFIG_FREERTOS_UNICORE
  21. void yieldIfNecessary(void){
  22. static uint64_t lastYield = 0;
  23. uint64_t now = millis();
  24. if((now - lastYield) > 2000) {
  25. lastYield = now;
  26. vTaskDelay(5); //delay 1 RTOS tick
  27. }
  28. }
  29. #endif
  30. bool loopTaskWDTEnabled;
  31. __attribute__((weak)) size_t getArduinoLoopTaskStackSize(void) {
  32. return ARDUINO_LOOP_STACK_SIZE;
  33. }
  34. void loopTask(void *pvParameters)
  35. {
  36. setup();
  37. for(;;) {
  38. #if CONFIG_FREERTOS_UNICORE
  39. yieldIfNecessary();
  40. #endif
  41. if(loopTaskWDTEnabled){
  42. esp_task_wdt_reset();
  43. }
  44. loop();
  45. if (serialEventRun) serialEventRun();
  46. }
  47. }
  48. extern void setup_usb_ids();
  49. extern "C" void app_main()
  50. {
  51. setup_usb_ids(); /* Local addition */
  52. #if ARDUINO_USB_CDC_ON_BOOT && !ARDUINO_USB_MODE
  53. Serial.begin();
  54. #endif
  55. #if ARDUINO_USB_MSC_ON_BOOT && !ARDUINO_USB_MODE
  56. MSC_Update.begin();
  57. #endif
  58. #if ARDUINO_USB_DFU_ON_BOOT && !ARDUINO_USB_MODE
  59. USB.enableDFU();
  60. #endif
  61. #if ARDUINO_USB_ON_BOOT && !ARDUINO_USB_MODE
  62. USB.begin();
  63. #endif
  64. loopTaskWDTEnabled = false;
  65. initArduino();
  66. xTaskCreateUniversal(loopTask, "loopTask", getArduinoLoopTaskStackSize(), NULL, 1, &loopTaskHandle, ARDUINO_RUNNING_CORE);
  67. }
  68. #endif