Merge branch 'main' into bugfix/renault-zoe-refactor

This commit is contained in:
Daniel Öster 2024-06-14 23:41:38 +03:00
commit d22d3546d5
14 changed files with 56 additions and 22 deletions

View file

@ -86,8 +86,8 @@ float charger_stat_LVvol = 0;
int64_t core_task_time_us; int64_t core_task_time_us;
MyTimer core_task_timer_10s(INTERVAL_10_S); MyTimer core_task_timer_10s(INTERVAL_10_S);
int64_t mqtt_task_time_us; int64_t connectivity_task_time_us;
MyTimer mqtt_task_timer_10s(INTERVAL_10_S); MyTimer connectivity_task_timer_10s(INTERVAL_10_S);
MyTimer loop_task_timer_10s(INTERVAL_10_S); MyTimer loop_task_timer_10s(INTERVAL_10_S);
@ -116,7 +116,7 @@ unsigned long timeSpentInFaultedMode = 0;
#endif #endif
TaskHandle_t main_loop_task; TaskHandle_t main_loop_task;
TaskHandle_t mqtt_loop_task; TaskHandle_t connectivity_loop_task;
// Initialization // Initialization
void setup() { void setup() {
@ -125,11 +125,9 @@ void setup() {
init_stored_settings(); init_stored_settings();
#ifdef WEBSERVER #ifdef WEBSERVER
init_webserver();
init_mDNS();
#ifdef MQTT #ifdef MQTT
xTaskCreatePinnedToCore((TaskFunction_t)&mqtt_loop, "mqtt_loop", 4096, &mqtt_task_time_us, TASK_CONNECTIVITY_PRIO, xTaskCreatePinnedToCore((TaskFunction_t)&connectivity_loop, "connectivity_loop", 4096, &connectivity_task_time_us,
&mqtt_loop_task, WIFI_CORE); TASK_CONNECTIVITY_PRIO, &connectivity_loop_task, WIFI_CORE);
#endif #endif
#endif #endif
@ -170,25 +168,33 @@ void loop() {
#endif #endif
} }
#ifdef WEBSERVER
#ifdef MQTT #ifdef MQTT
void mqtt_loop(void* task_time_us) { void connectivity_loop(void* task_time_us) {
// Init MQTT // Init
init_webserver();
init_mDNS();
init_mqtt(); init_mqtt();
while (true) { while (true) {
START_TIME_MEASUREMENT(wifi);
wifi_monitor();
END_TIME_MEASUREMENT_MAX(wifi, datalayer.system.status.wifi_task_10s_max_us);
START_TIME_MEASUREMENT(mqtt); START_TIME_MEASUREMENT(mqtt);
mqtt_loop(); mqtt_loop();
END_TIME_MEASUREMENT_MAX(mqtt, datalayer.system.status.mqtt_task_10s_max_us); END_TIME_MEASUREMENT_MAX(mqtt, datalayer.system.status.mqtt_task_10s_max_us);
#ifdef FUNCTION_TIME_MEASUREMENT #ifdef FUNCTION_TIME_MEASUREMENT
if (mqtt_task_timer_10s.elapsed()) { if (connectivity_task_timer_10s.elapsed()) {
datalayer.system.status.mqtt_task_10s_max_us = 0; datalayer.system.status.mqtt_task_10s_max_us = 0;
datalayer.system.status.wifi_task_10s_max_us = 0;
} }
#endif #endif
delay(1); delay(1);
} }
} }
#endif #endif
#endif
void core_loop(void* task_time_us) { void core_loop(void* task_time_us) {
TickType_t xLastWakeTime = xTaskGetTickCount(); TickType_t xLastWakeTime = xTaskGetTickCount();
@ -211,10 +217,9 @@ void core_loop(void* task_time_us) {
#endif #endif
END_TIME_MEASUREMENT_MAX(comm, datalayer.system.status.time_comm_us); END_TIME_MEASUREMENT_MAX(comm, datalayer.system.status.time_comm_us);
#ifdef WEBSERVER #ifdef WEBSERVER
START_TIME_MEASUREMENT(wifi_ota); START_TIME_MEASUREMENT(ota);
wifi_monitor();
ElegantOTA.loop(); ElegantOTA.loop();
END_TIME_MEASUREMENT_MAX(wifi_ota, datalayer.system.status.time_wifi_us); END_TIME_MEASUREMENT_MAX(ota, datalayer.system.status.time_ota_us);
#endif #endif
START_TIME_MEASUREMENT(time_10ms); START_TIME_MEASUREMENT(time_10ms);
@ -262,13 +267,13 @@ void core_loop(void* task_time_us) {
datalayer.system.status.time_snap_10ms_us = datalayer.system.status.time_10ms_us; datalayer.system.status.time_snap_10ms_us = datalayer.system.status.time_10ms_us;
datalayer.system.status.time_snap_5s_us = datalayer.system.status.time_5s_us; datalayer.system.status.time_snap_5s_us = datalayer.system.status.time_5s_us;
datalayer.system.status.time_snap_cantx_us = datalayer.system.status.time_cantx_us; datalayer.system.status.time_snap_cantx_us = datalayer.system.status.time_cantx_us;
datalayer.system.status.time_snap_wifi_us = datalayer.system.status.time_wifi_us; datalayer.system.status.time_snap_ota_us = datalayer.system.status.time_ota_us;
} }
datalayer.system.status.core_task_max_us = datalayer.system.status.core_task_max_us =
MAX(datalayer.system.status.core_task_10s_max_us, datalayer.system.status.core_task_max_us); MAX(datalayer.system.status.core_task_10s_max_us, datalayer.system.status.core_task_max_us);
if (core_task_timer_10s.elapsed()) { if (core_task_timer_10s.elapsed()) {
datalayer.system.status.time_wifi_us = 0; datalayer.system.status.time_ota_us = 0;
datalayer.system.status.time_comm_us = 0; datalayer.system.status.time_comm_us = 0;
datalayer.system.status.time_10ms_us = 0; datalayer.system.status.time_10ms_us = 0;
datalayer.system.status.time_5s_us = 0; datalayer.system.status.time_5s_us = 0;

View file

@ -687,6 +687,8 @@ void send_can_battery() {
// Check if sending of CAN messages has been delayed too much. // Check if sending of CAN messages has been delayed too much.
if ((currentMillis - previousMillis20 >= INTERVAL_20_MS_DELAYED) && (currentMillis > BOOTUP_TIME)) { if ((currentMillis - previousMillis20 >= INTERVAL_20_MS_DELAYED) && (currentMillis > BOOTUP_TIME)) {
set_event(EVENT_CAN_OVERRUN, (currentMillis - previousMillis20)); set_event(EVENT_CAN_OVERRUN, (currentMillis - previousMillis20));
} else {
clear_event(EVENT_CAN_OVERRUN);
} }
previousMillis20 = currentMillis; previousMillis20 = currentMillis;

View file

@ -264,6 +264,8 @@ void send_can_battery() {
// Check if sending of CAN messages has been delayed too much. // Check if sending of CAN messages has been delayed too much.
if ((currentMillis - previousMillis50 >= INTERVAL_50_MS_DELAYED) && (currentMillis > BOOTUP_TIME)) { if ((currentMillis - previousMillis50 >= INTERVAL_50_MS_DELAYED) && (currentMillis > BOOTUP_TIME)) {
set_event(EVENT_CAN_OVERRUN, (currentMillis - previousMillis50)); set_event(EVENT_CAN_OVERRUN, (currentMillis - previousMillis50));
} else {
clear_event(EVENT_CAN_OVERRUN);
} }
previousMillis50 = currentMillis; previousMillis50 = currentMillis;

View file

@ -689,6 +689,8 @@ void send_can_battery() {
// Check if sending of CAN messages has been delayed too much. // Check if sending of CAN messages has been delayed too much.
if ((currentMillis - previousMillis100 >= INTERVAL_100_MS_DELAYED) && (currentMillis > BOOTUP_TIME)) { if ((currentMillis - previousMillis100 >= INTERVAL_100_MS_DELAYED) && (currentMillis > BOOTUP_TIME)) {
set_event(EVENT_CAN_OVERRUN, (currentMillis - previousMillis100)); set_event(EVENT_CAN_OVERRUN, (currentMillis - previousMillis100));
} else {
clear_event(EVENT_CAN_OVERRUN);
} }
previousMillis100 = currentMillis; previousMillis100 = currentMillis;

View file

@ -188,6 +188,8 @@ void send_can_battery() {
// Check if sending of CAN messages has been delayed too much. // Check if sending of CAN messages has been delayed too much.
if ((currentMillis - previousMillis100 >= INTERVAL_100_MS_DELAYED) && (currentMillis > BOOTUP_TIME)) { if ((currentMillis - previousMillis100 >= INTERVAL_100_MS_DELAYED) && (currentMillis > BOOTUP_TIME)) {
set_event(EVENT_CAN_OVERRUN, (currentMillis - previousMillis100)); set_event(EVENT_CAN_OVERRUN, (currentMillis - previousMillis100));
} else {
clear_event(EVENT_CAN_OVERRUN);
} }
previousMillis100 = currentMillis; previousMillis100 = currentMillis;

View file

@ -377,6 +377,8 @@ void send_can_battery() {
// Check if sending of CAN messages has been delayed too much. // Check if sending of CAN messages has been delayed too much.
if ((currentMillis - previousMillis500ms >= INTERVAL_500_MS_DELAYED) && (currentMillis > BOOTUP_TIME)) { if ((currentMillis - previousMillis500ms >= INTERVAL_500_MS_DELAYED) && (currentMillis > BOOTUP_TIME)) {
set_event(EVENT_CAN_OVERRUN, (currentMillis - previousMillis500ms)); set_event(EVENT_CAN_OVERRUN, (currentMillis - previousMillis500ms));
} else {
clear_event(EVENT_CAN_OVERRUN);
} }
previousMillis500ms = currentMillis; previousMillis500ms = currentMillis;
// Section added to close contractor // Section added to close contractor

View file

@ -525,6 +525,8 @@ void send_can_battery() {
// Check if sending of CAN messages has been delayed too much. // Check if sending of CAN messages has been delayed too much.
if ((currentMillis - previousMillis10 >= INTERVAL_10_MS_DELAYED) && (currentMillis > BOOTUP_TIME)) { if ((currentMillis - previousMillis10 >= INTERVAL_10_MS_DELAYED) && (currentMillis > BOOTUP_TIME)) {
set_event(EVENT_CAN_OVERRUN, (currentMillis - previousMillis10)); set_event(EVENT_CAN_OVERRUN, (currentMillis - previousMillis10));
} else {
clear_event(EVENT_CAN_OVERRUN);
} }
previousMillis10 = currentMillis; previousMillis10 = currentMillis;

View file

@ -125,6 +125,8 @@ void send_can_battery() {
// Check if sending of CAN messages has been delayed too much. // Check if sending of CAN messages has been delayed too much.
if ((currentMillis - previousMillis10 >= INTERVAL_10_MS_DELAYED) && (currentMillis > BOOTUP_TIME)) { if ((currentMillis - previousMillis10 >= INTERVAL_10_MS_DELAYED) && (currentMillis > BOOTUP_TIME)) {
set_event(EVENT_CAN_OVERRUN, (currentMillis - previousMillis10)); set_event(EVENT_CAN_OVERRUN, (currentMillis - previousMillis10));
} else {
clear_event(EVENT_CAN_OVERRUN);
} }
previousMillis10 = currentMillis; previousMillis10 = currentMillis;

View file

@ -559,6 +559,8 @@ void send_can_battery() {
// Check if sending of CAN messages has been delayed too much. // Check if sending of CAN messages has been delayed too much.
if ((currentMillis - previousMillis10 >= INTERVAL_10_MS_DELAYED) && (currentMillis > BOOTUP_TIME)) { if ((currentMillis - previousMillis10 >= INTERVAL_10_MS_DELAYED) && (currentMillis > BOOTUP_TIME)) {
set_event(EVENT_CAN_OVERRUN, (currentMillis - previousMillis10)); set_event(EVENT_CAN_OVERRUN, (currentMillis - previousMillis10));
} else {
clear_event(EVENT_CAN_OVERRUN);
} }
previousMillis10 = currentMillis; previousMillis10 = currentMillis;

View file

@ -123,6 +123,8 @@ void send_can_battery() {
// Check if sending of CAN messages has been delayed too much. // Check if sending of CAN messages has been delayed too much.
if ((currentMillis - previousMillis10 >= INTERVAL_10_MS_DELAYED) && (currentMillis > BOOTUP_TIME)) { if ((currentMillis - previousMillis10 >= INTERVAL_10_MS_DELAYED) && (currentMillis > BOOTUP_TIME)) {
set_event(EVENT_CAN_OVERRUN, (currentMillis - previousMillis10)); set_event(EVENT_CAN_OVERRUN, (currentMillis - previousMillis10));
} else {
clear_event(EVENT_CAN_OVERRUN);
} }
previousMillis10 = currentMillis; previousMillis10 = currentMillis;

View file

@ -568,6 +568,8 @@ the first, for a few cycles, then stop all messages which causes the contactor
// Check if sending of CAN messages has been delayed too much. // Check if sending of CAN messages has been delayed too much.
if ((currentMillis - previousMillis30 >= INTERVAL_30_MS_DELAYED) && (currentMillis > BOOTUP_TIME)) { if ((currentMillis - previousMillis30 >= INTERVAL_30_MS_DELAYED) && (currentMillis > BOOTUP_TIME)) {
set_event(EVENT_CAN_OVERRUN, (currentMillis - previousMillis30)); set_event(EVENT_CAN_OVERRUN, (currentMillis - previousMillis30));
} else {
clear_event(EVENT_CAN_OVERRUN);
} }
previousMillis30 = currentMillis; previousMillis30 = currentMillis;

View file

@ -331,6 +331,8 @@ void send_can_battery() {
// Check if sending of CAN messages has been delayed too much. // Check if sending of CAN messages has been delayed too much.
if ((currentMillis - previousMillis100 >= INTERVAL_100_MS_DELAYED) && (currentMillis > BOOTUP_TIME)) { if ((currentMillis - previousMillis100 >= INTERVAL_100_MS_DELAYED) && (currentMillis > BOOTUP_TIME)) {
set_event(EVENT_CAN_OVERRUN, (currentMillis - previousMillis100)); set_event(EVENT_CAN_OVERRUN, (currentMillis - previousMillis100));
} else {
clear_event(EVENT_CAN_OVERRUN);
} }
previousMillis100 = currentMillis; previousMillis100 = currentMillis;

View file

@ -113,13 +113,15 @@ typedef struct {
int64_t core_task_max_us = 0; int64_t core_task_max_us = 0;
/** Core task measurement variable, reset each 10 seconds */ /** Core task measurement variable, reset each 10 seconds */
int64_t core_task_10s_max_us = 0; int64_t core_task_10s_max_us = 0;
/** MQTT task measurement variable, reset each 10 seconds */ /** MQTT sub-task measurement variable, reset each 10 seconds */
int64_t mqtt_task_10s_max_us = 0; int64_t mqtt_task_10s_max_us = 0;
/** Wifi sub-task measurement variable, reset each 10 seconds */
int64_t wifi_task_10s_max_us = 0;
/** loop() task measurement variable, reset each 10 seconds */ /** loop() task measurement variable, reset each 10 seconds */
int64_t loop_task_10s_max_us = 0; int64_t loop_task_10s_max_us = 0;
/** OTA/Wifi handling function measurement variable */ /** OTA handling function measurement variable */
int64_t time_wifi_us = 0; int64_t time_ota_us = 0;
/** CAN RX or serial link function measurement variable */ /** CAN RX or serial link function measurement variable */
int64_t time_comm_us = 0; int64_t time_comm_us = 0;
/** 10 ms function measurement variable */ /** 10 ms function measurement variable */
@ -130,9 +132,9 @@ typedef struct {
int64_t time_cantx_us = 0; int64_t time_cantx_us = 0;
/** Function measurement snapshot variable. /** Function measurement snapshot variable.
* This will show the performance of OTA/Wifi handling when the total time reached a new worst case * This will show the performance of OTA handling when the total time reached a new worst case
*/ */
int64_t time_snap_wifi_us = 0; int64_t time_snap_ota_us = 0;
/** Function measurement snapshot variable. /** Function measurement snapshot variable.
* This will show the performance of CAN RX or serial link when the total time reached a new worst case * This will show the performance of CAN RX or serial link when the total time reached a new worst case
*/ */

View file

@ -386,7 +386,12 @@ String processor(const String& var) {
// Load information // Load information
content += "<h4>Core task max load: " + String(datalayer.system.status.core_task_max_us) + " us</h4>"; content += "<h4>Core task max load: " + String(datalayer.system.status.core_task_max_us) + " us</h4>";
content += "<h4>Core task max load last 10 s: " + String(datalayer.system.status.core_task_10s_max_us) + " us</h4>"; content += "<h4>Core task max load last 10 s: " + String(datalayer.system.status.core_task_10s_max_us) + " us</h4>";
content += "<h4>MQTT task max load last 10 s: " + String(datalayer.system.status.mqtt_task_10s_max_us) + " us</h4>"; content +=
"<h4>MQTT function (MQTT task) max load last 10 s: " + String(datalayer.system.status.mqtt_task_10s_max_us) +
" us</h4>";
content +=
"<h4>WIFI function (MQTT task) max load last 10 s: " + String(datalayer.system.status.wifi_task_10s_max_us) +
" us</h4>";
content += content +=
"<h4>loop() task max load last 10 s: " + String(datalayer.system.status.loop_task_10s_max_us) + " us</h4>"; "<h4>loop() task max load last 10 s: " + String(datalayer.system.status.loop_task_10s_max_us) + " us</h4>";
content += "<h4>Max load @ worst case execution of core task:</h4>"; content += "<h4>Max load @ worst case execution of core task:</h4>";
@ -394,7 +399,7 @@ String processor(const String& var) {
content += "<h4>5s function timing: " + String(datalayer.system.status.time_snap_5s_us) + " us</h4>"; content += "<h4>5s function timing: " + String(datalayer.system.status.time_snap_5s_us) + " us</h4>";
content += "<h4>CAN/serial RX function timing: " + String(datalayer.system.status.time_snap_comm_us) + " us</h4>"; content += "<h4>CAN/serial RX function timing: " + String(datalayer.system.status.time_snap_comm_us) + " us</h4>";
content += "<h4>CAN TX function timing: " + String(datalayer.system.status.time_snap_cantx_us) + " us</h4>"; content += "<h4>CAN TX function timing: " + String(datalayer.system.status.time_snap_cantx_us) + " us</h4>";
content += "<h4>Wifi and OTA function timing: " + String(datalayer.system.status.time_snap_wifi_us) + " us</h4>"; content += "<h4>OTA function timing: " + String(datalayer.system.status.time_snap_ota_us) + " us</h4>";
#endif #endif
wl_status_t status = WiFi.status(); wl_status_t status = WiFi.status();