main.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include <Arduino.h>
  2. #include "display_task.h"
  3. #include "interface_task.h"
  4. #include "motor_task.h"
  5. #if SK_DISPLAY
  6. static DisplayTask display_task(0);
  7. static DisplayTask* display_task_p = &display_task;
  8. #else
  9. static DisplayTask* display_task_p = nullptr;
  10. #endif
  11. static MotorTask motor_task(1);
  12. InterfaceTask interface_task(0, motor_task, display_task_p);
  13. void setup() {
  14. #if SK_DISPLAY
  15. display_task.setLogger(&interface_task);
  16. display_task.begin();
  17. // Connect display to motor_task's knob state feed
  18. motor_task.addListener(display_task.getKnobStateQueue());
  19. #endif
  20. motor_task.setLogger(&interface_task);
  21. motor_task.begin();
  22. interface_task.begin();
  23. // Free up the Arduino loop task
  24. vTaskDelete(NULL);
  25. }
  26. void loop() {
  27. // char buf[50];
  28. // static uint32_t last_stack_debug;
  29. // if (millis() - last_stack_debug > 1000) {
  30. // interface_task.log("Stack high water:");
  31. // snprintf(buf, sizeof(buf), " main: %d", uxTaskGetStackHighWaterMark(NULL));
  32. // interface_task.log(buf);
  33. // #if SK_DISPLAY
  34. // snprintf(buf, sizeof(buf), " display: %d", uxTaskGetStackHighWaterMark(display_task.getHandle()));
  35. // interface_task.log(buf);
  36. // #endif
  37. // snprintf(buf, sizeof(buf), " motor: %d", uxTaskGetStackHighWaterMark(motor_task.getHandle()));
  38. // interface_task.log(buf);
  39. // snprintf(buf, sizeof(buf), " interface: %d", uxTaskGetStackHighWaterMark(interface_task.getHandle()));
  40. // interface_task.log(buf);
  41. // snprintf(buf, sizeof(buf), "Heap -- free: %d, largest: %d", heap_caps_get_free_size(MALLOC_CAP_8BIT), heap_caps_get_largest_free_block(MALLOC_CAP_8BIT));
  42. // interface_task.log(buf);
  43. // last_stack_debug = millis();
  44. // }
  45. }