From 063a109de59ae4e5043731229ff0c0903ef95d63 Mon Sep 17 00:00:00 2001
From: Cyril Danilevski <cyril.danilevski@xfel.eu>
Date: Fri, 28 Feb 2025 21:41:27 +0100
Subject: [PATCH] Run web server on separate core

---
 icbm.ino | 37 +++++++++++++++++++++++++++++--------
 1 file changed, 29 insertions(+), 8 deletions(-)

diff --git a/icbm.ino b/icbm.ino
index cb83fd8..522114c 100644
--- a/icbm.ino
+++ b/icbm.ino
@@ -7,6 +7,9 @@ unsigned long start;
 extern bool eth_connected;
 extern SNMP::Manager snmp;
 
+TaskHandle_t restServerTask;
+TaskHandle_t powerProcedureTask;
+
 void setup() {
     Serial.begin(115200);
 
@@ -22,6 +25,11 @@ void setup() {
     PINS.ramping = false;
 
     start = millis();
+
+    xTaskCreatePinnedToCore(webInterfaceLoop, "Web Interface", 10000, NULL, 1, &restServerTask, 0);
+
+    xTaskCreatePinnedToCore(mainLoop, "PowerProcedure Task", 10000, NULL, 1, &powerProcedureTask,
+                            1);
 }
 
 enum {
@@ -37,13 +45,26 @@ void serialLoop() {
     }
 }
 
-void loop() {
-    isr_check_loop();
-    snmp.loop();
-    restServer.handleClient();
-    toggle_status_led();
-    serialLoop();
-    if (eth_connected) {  // We may be triggered, but disconnected from the network.
-        powerOffCheckLoop();
+void webInterfaceLoop(void* pvParameters) {
+    Serial.print("Web loop running on core ");
+    Serial.println(xPortGetCoreID());
+    while (true) {
+        restServer.handleClient();
     }
 }
+
+void mainLoop(void* pvParameters) {
+    Serial.print("main loop running on core ");
+    Serial.println(xPortGetCoreID());
+    while (true) {
+        isr_check_loop();
+        snmp.loop();
+        toggle_status_led();
+        serialLoop();
+        if (eth_connected) {  // We may be triggered, but disconnected from the network.
+            powerOffCheckLoop();
+        }
+    }
+}
+
+void loop() {}
-- 
GitLab