main.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include <Arduino.h>
  2. #include <SimpleFOC.h>
  3. #include "display_task.h"
  4. #include "interface_task.h"
  5. #include "motor_task.h"
  6. #if SK_DISPLAY
  7. static DisplayTask display_task = DisplayTask(0);
  8. static DisplayTask* display_task_p = &display_task;
  9. #else
  10. static DisplayTask* display_task_p = nullptr;
  11. #endif
  12. static MotorTask motor_task = MotorTask(1);
  13. InterfaceTask interface_task = InterfaceTask(0, motor_task, display_task_p);
  14. static QueueHandle_t knob_state_debug_queue;
  15. void setup() {
  16. Serial.begin(115200);
  17. motor_task.begin();
  18. interface_task.begin();
  19. #if SK_DISPLAY
  20. display_task.begin();
  21. // Connect display to motor_task's knob state feed
  22. motor_task.addListener(display_task.getKnobStateQueue());
  23. #endif
  24. // Create a queue and register it with motor_task to print knob state to serial (see loop() below)
  25. knob_state_debug_queue = xQueueCreate(1, sizeof(KnobState));
  26. assert(knob_state_debug_queue != NULL);
  27. motor_task.addListener(knob_state_debug_queue);
  28. // Free up the loop task
  29. vTaskDelete(NULL);
  30. }
  31. static KnobState state = {};
  32. uint32_t last_debug;
  33. void loop() {
  34. // Print any new state, at most 5 times per second
  35. if (millis() - last_debug > 200 && xQueueReceive(knob_state_debug_queue, &state, portMAX_DELAY) == pdTRUE) {
  36. Serial.println(state.current_position);
  37. last_debug = millis();
  38. }
  39. static uint32_t last_stack_debug;
  40. if (millis() - last_stack_debug > 1000) {
  41. Serial.println("Stack high water:");
  42. Serial.printf("main: %d\n", uxTaskGetStackHighWaterMark(NULL));
  43. #if SK_DISPLAY
  44. Serial.printf("display: %d\n", uxTaskGetStackHighWaterMark(display_task.getHandle()));
  45. #endif
  46. Serial.printf("motor: %d\n", uxTaskGetStackHighWaterMark(motor_task.getHandle()));
  47. Serial.printf("interface: %d\n", uxTaskGetStackHighWaterMark(interface_task.getHandle()));
  48. last_stack_debug = millis();
  49. }
  50. }