From 0f25b97ba1f9ce098edce474b3241e833e4701a7 Mon Sep 17 00:00:00 2001 From: biver Date: Sat, 25 Feb 2023 18:31:18 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D0=BC=20=D0=B2=20main=20=D0=BF=D0=BE=D0=B4=D1=81=D1=87?= =?UTF-8?q?=D0=B5=D1=82=20=D0=B2=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=B8=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=B1=D0=BB=D0=BE=D0=BA=D0=BE=D0=B2=20=D0=BA=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Main.cpp | 97 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 86 insertions(+), 11 deletions(-) diff --git a/src/Main.cpp b/src/Main.cpp index ae2e11c0..41d694de 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -30,7 +30,61 @@ void elementsLoop() { } + + +#define SETUPBASE_ERRORMARKER 0 +#define SETUPCONF_ERRORMARKER 1 +#define SETUPSCEN_ERRORMARKER 2 +#define SETUPINET_ERRORMARKER 3 +#define SETUPLAST_ERRORMARKER 4 +#define TICKER_ERRORMARKER 5 +#define HTTP_ERRORMARKER 6 +#define SOCKETS_ERRORMARKER 7 +#define MQTT_ERRORMARKER 8 +#define MODULES_ERRORMARKER 9 + +#define COUNTER_ERRORMARKER 9 // количество шагов счетчика +#define STEPPER_ERRORMARKER 100000 // размер шага счетчика интервала доверия выполнения блока кода мкс + +int initErrorMarkerId = 0; // ИД маркера +int errorMarkerId = 0; +unsigned long errorMarkerCounter = 0; + +hw_timer_t *My_timer = NULL; +void IRAM_ATTR onTimer(){ + if (errorMarkerCounter >= 0) { + if (errorMarkerCounter >= COUNTER_ERRORMARKER) { + errorMarkerId = initErrorMarkerId; + errorMarkerCounter = -1; + } else + errorMarkerCounter++; + } +} + +void initErrorMarker(int id) { + initErrorMarkerId = id; + errorMarkerCounter = 0; +} + +void stopErrorMarker(int id) { + errorMarkerCounter = -1; + if (errorMarkerId) + SerialPrint("I", "WARNING!", "A lazy (freezing loop more than " + (String)(COUNTER_ERRORMARKER * STEPPER_ERRORMARKER / 1000) + " ms) section has been found! With ID=" + (String)errorMarkerId); + errorMarkerId = 0; + initErrorMarkerId = 0; +} + + + void setup() { + My_timer = timerBegin(0, 80, true); + timerAttachInterrupt(My_timer, &onTimer, true); + timerAlarmWrite(My_timer, STEPPER_ERRORMARKER, true); + timerAlarmEnable(My_timer); + //timerAlarmDisable(My_timer); + + initErrorMarker(SETUPBASE_ERRORMARKER); + Serial.begin(115200); Serial.flush(); Serial.println(); @@ -53,9 +107,12 @@ void setup() { // синхронизация глобальных переменных с flash globalVarsSync(); - + stopErrorMarker(SETUPBASE_ERRORMARKER); + + initErrorMarker(SETUPCONF_ERRORMARKER); + // настраиваем микроконтроллер configure("/config.json"); @@ -76,17 +133,24 @@ void setup() { SerialPrint("i", "i2c", F("i2c pins overriding done")); } + stopErrorMarker(SETUPCONF_ERRORMARKER); + + + + initErrorMarker(SETUPSCEN_ERRORMARKER); + // подготавливаем сценарии iotScen.loadScenario("/scenario.txt"); - // создаем событие завершения инициализации основных моментов для возможности выполнения блока кода при загрузке createItemFromNet("onInit", "1", 1); - elementsLoop(); + stopErrorMarker(SETUPSCEN_ERRORMARKER); + - + initErrorMarker(SETUPINET_ERRORMARKER); + // подключаемся к роутеру routerConnect(); @@ -106,14 +170,15 @@ void setup() { standWebSocketsInit(); #endif + stopErrorMarker(SETUPINET_ERRORMARKER); + + + + initErrorMarker(SETUPLAST_ERRORMARKER); + // NTP ntpInit(); - // инициализация mqtt - //mqttInit(); - - - // инициализация задач переодического выполнения periodicTasksInit(); @@ -149,6 +214,8 @@ void setup() { // test Serial.println("-------test start--------"); Serial.println("--------test end---------"); + + stopErrorMarker(SETUPLAST_ERRORMARKER); } @@ -158,21 +225,29 @@ void loop() { unsigned long st = millis(); #endif + initErrorMarker(TICKER_ERRORMARKER); ts.update(); + stopErrorMarker(TICKER_ERRORMARKER); #ifdef STANDARD_WEB_SERVER + initErrorMarker(HTTP_ERRORMARKER); HTTP.handleClient(); + stopErrorMarker(HTTP_ERRORMARKER); #endif #ifdef STANDARD_WEB_SOCKETS + initErrorMarker(SOCKETS_ERRORMARKER); standWebSocket.loop(); + stopErrorMarker(SOCKETS_ERRORMARKER); #endif + initErrorMarker(MQTT_ERRORMARKER); mqttLoop(); - + stopErrorMarker(MQTT_ERRORMARKER); + initErrorMarker(MODULES_ERRORMARKER); elementsLoop(); - + stopErrorMarker(MODULES_ERRORMARKER); // #ifdef LOOP_DEBUG // loopPeriod = millis() - st;