Moving mqtt loop to new task with lower priority than wifi and http to limit impact of mqtt load on wifi and http performance.

This commit is contained in:
Matt Holmes 2025-03-09 18:33:14 +00:00
parent 6109211c96
commit d9167c3cc7
2 changed files with 32 additions and 9 deletions

View file

@ -70,9 +70,13 @@ MyTimer loop_task_timer_10s(INTERVAL_10_S);
MyTimer check_pause_2s(INTERVAL_2_S);
int64_t mqtt_task_time_us;
MyTimer mqtt_task_timer_10s(INTERVAL_10_S);
TaskHandle_t main_loop_task;
TaskHandle_t connectivity_loop_task;
TaskHandle_t logging_loop_task;
TaskHandle_t mqtt_loop_task;
Logging logging;
@ -99,6 +103,11 @@ void setup() {
TASK_CONNECTIVITY_PRIO, &logging_loop_task, WIFI_CORE);
#endif
#ifdef MQTT
xTaskCreatePinnedToCore((TaskFunction_t)&mqtt_loop, "mqtt_loop", 4096, &mqtt_task_time_us, TASK_MQTT_PRIO,
&mqtt_loop_task, WIFI_CORE);
#endif
init_CAN();
init_contactors();
@ -180,9 +189,6 @@ void connectivity_loop(void* task_time_us) {
#ifdef MDNSRESPONDER
init_mDNS();
#endif
#ifdef MQTT
init_mqtt();
#endif
while (true) {
START_TIME_MEASUREMENT(wifi);
@ -191,15 +197,9 @@ void connectivity_loop(void* task_time_us) {
ota_monitor();
#endif
END_TIME_MEASUREMENT_MAX(wifi, datalayer.system.status.wifi_task_10s_max_us);
#ifdef MQTT
START_TIME_MEASUREMENT(mqtt);
mqtt_loop();
END_TIME_MEASUREMENT_MAX(mqtt, datalayer.system.status.mqtt_task_10s_max_us);
#endif
#ifdef FUNCTION_TIME_MEASUREMENT
if (connectivity_task_timer_10s.elapsed()) {
datalayer.system.status.mqtt_task_10s_max_us = 0;
datalayer.system.status.wifi_task_10s_max_us = 0;
}
#endif
@ -209,6 +209,28 @@ void connectivity_loop(void* task_time_us) {
}
#endif
#ifdef MQTT
void mqtt_loop(void* task_time_us) {
esp_task_wdt_add(NULL); // Register this task with WDT
init_mqtt();
while (true) {
START_TIME_MEASUREMENT(mqtt);
mqtt_loop();
END_TIME_MEASUREMENT_MAX(mqtt, datalayer.system.status.mqtt_task_10s_max_us);
#ifdef FUNCTION_TIME_MEASUREMENT
if (mqtt_task_timer_10s.elapsed()) {
datalayer.system.status.mqtt_task_10s_max_us = 0;
}
#endif
esp_task_wdt_reset(); // Reset watchdog
delay(1);
}
}
#endif
void core_loop(void* task_time_us) {
esp_task_wdt_add(NULL); // Register this task with WDT
TickType_t xLastWakeTime = xTaskGetTickCount();

View file

@ -25,6 +25,7 @@
*/
#define TASK_CORE_PRIO 4
#define TASK_CONNECTIVITY_PRIO 3
#define TASK_MQTT_PRIO 2
#define TASK_MODBUS_PRIO 8
#define TASK_ACAN2515_PRIORITY 10
#define TASK_ACAN2517FD_PRIORITY 10