Forum: Mikrocontroller und Digitale Elektronik ESP32 Watchdog Problem


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Klaus K. (klkl)


Lesenswert?

Hallo zusammen

Ich habe ein umfangreicheres ESP32 Arduino Projekt (2ndCore, 485, MQTT, 
Display, Web, ...) das mit Watchdog-Timer reproduzierbar abstürzt (im 
groben 10 Minuten Rythmus eine WD auslösung, teilweise aber auch 
schneller) ohne WD aber ohne Auffälligkeiten über Tage läuft.
Wenn der WD benutzt wird verwende Ich folgenden Code:

--- in setup()
esp_task_wdt_init(wdtTimeout_s, true);  // enable panic so ESP32 
restarts
esp_task_wdt_add(NULL);                 // add current thread to WDT 
watch
--- in loop()
  esp_task_wdt_reset();
---
Es ist sichergestellt das esp_task_wdt_reset() auch aufgerufen wird. 
wdtTimeout_s steht z.B auf 40 (sekunden) und durch Ausgaben auf der 
Seriellen kann Ich sehen das die loop läuft und im <Sekunden Bereich den 
WD zurueck setzt.
Ohne diese 3 Zeilen läuft es stabil (>24h ohne Absturz)

Ein Absturz kommt nicht direkt durch den WD Timer, hier zwei Beispiele:
---
Guru Meditation Error: Core  1 panic'ed (Unhandled debug exception).
Debug exception reason: BREAK instr
Core  1 register dump:
PC      : 0x400803c0  PS      : 0x00060b36  A0      : 0x80148699  A1 
: 0x3ffcc610
A2      : 0x37400c04  A3      : 0x3ffcc690  A4      : 0x00000004  A5 
: 0x00000000
A6      : 0x00000155  A7      : 0x37400c04  A8      : 0x00000000  A9 
: 0x00000000
A10     : 0x00000001  A11     : 0x58b48bfc  A12     : 0x00000004  A13 
: 0x3ffcc694
A14     : 0x6c030050  A15     : 0x6c030050  SAR     : 0x00000018 
EXCCAUSE: 0x00000001
EXCVADDR: 0x00000008  LBEG    : 0x40089d01  LEND    : 0x40089d23  LCOUNT 
: 0xffffffff


Backtrace: 0x400803bd:0x3ffcc610 0x40148696:0x3ffcc630 
0x401489ad:0x3ffcc6d0 0x4014983b:0x3ffcc700 0x4014a36d:0x3ffcc760 
0x4014bd9d:0x3ffcc790 0x40147881:0x3ffcc7b0 0x400e73d2:0x3ffcc7e0 
0x400dd195:0x3ffcc810 0x4019c445:0x3ffcca00 0x400ed276:0x3ffcca20 
0x400ed31d:0x3ffcca40 0x400ed3fa:0x3ffcca80 0x400ed59d:0x3ffccaf0 
0x400e08bf:0x3ffccb40 0x400e12f9:0x3ffccb60 0x400e5c19:0x3ffccb80 
0x40107585:0x3ffccbe0

  #0  0x400803bd:0x3ffcc610 in _UserExceptionVector at ??:?
  #1  0x40148696:0x3ffcc630 in lfs_dir_fetchmatch at 
/Users/ficeto/Desktop/ESP32/ESP32S2/esp32-arduino-lib-builder/components 
/esp_littlefs/src/littlefs/lfs.c:1066
  #2  0x401489ad:0x3ffcc6d0 in lfs_dir_fetch at 
/Users/ficeto/Desktop/ESP32/ESP32S2/esp32-arduino-lib-builder/components 
/esp_littlefs/src/littlefs/lfs.c:1233
  #3  0x4014983b:0x3ffcc700 in lfs_fs_rawtraverse at 
/Users/ficeto/Desktop/ESP32/ESP32S2/esp32-arduino-lib-builder/components 
/esp_littlefs/src/littlefs/lfs.c:4278  (discriminator 1)
  #4  0x4014a36d:0x3ffcc760 in lfs_fs_rawsize at 
/Users/ficeto/Desktop/ESP32/ESP32S2/esp32-arduino-lib-builder/components 
/esp_littlefs/src/littlefs/lfs.c:4631
  #5  0x4014bd9d:0x3ffcc790 in lfs_fs_size at 
/Users/ficeto/Desktop/ESP32/ESP32S2/esp32-arduino-lib-builder/components 
/esp_littlefs/src/littlefs/lfs.c:5765
  #6  0x40147881:0x3ffcc7b0 in esp_littlefs_info at 
/Users/ficeto/Desktop/ESP32/ESP32S2/esp32-arduino-lib-builder/components 
/esp_littlefs/src/esp_littlefs.c:224  (discriminator 1)
  #7  0x400e73d2:0x3ffcc7e0 in fs::LittleFSFS::totalBytes() at 
/Users/klkl/.platformio/packages/framework-arduinoespressif32/libraries/ 
LittleFS/src/LittleFS.cpp:129
  #8  0x400dd195:0x3ffcc810 in handleRoot() at src/MyWebServer.cpp:414 
(discriminator 1)
  #9  0x4019c445:0x3ffcca00 in std::_Function_handler<void (), void 
(*)()>::_M_invoke(std::_Any_data const&) at 
/Users/klkl/.platformio/packages/toolchain-xtensa-esp32/xtensa-esp32-elf 
/include/c++/8.4.0/bits/std_function.h:297
  #10 0x400ed276:0x3ffcca20 in std::function<void ()>::operator()() 
const at 
/Users/klkl/.platformio/packages/toolchain-xtensa-esp32/xtensa-esp32-elf 
/include/c++/8.4.0/bits/std_function.h:687
  #11 0x400ed31d:0x3ffcca40 in 
FunctionRequestHandler::handle(WebServer&, http_method, String) at 
/Users/klkl/.platformio/packages/framework-arduinoespressif32/libraries/ 
WebServer/src/detail/RequestHandlersImpl.h:45
  #12 0x400ed3fa:0x3ffcca80 in WebServer::_handleRequest() at 
/Users/klkl/.platformio/packages/framework-arduinoespressif32/libraries/ 
WebServer/src/WebServer.cpp:651
  #13 0x400ed59d:0x3ffccaf0 in WebServer::handleClient() at 
/Users/klkl/.platformio/packages/framework-arduinoespressif32/libraries/ 
WebServer/src/WebServer.cpp:318
  #14 0x400e08bf:0x3ffccb40 in 
AutoConnectCore<AutoConnectConfigExt>::handleClient() at 
.pio/libdeps/heltec_wifi_lora_32_V2/AutoConnect/src/AutoConnectCoreImpl. 
hpp:540
  #15 0x400e12f9:0x3ffccb60 in workOnWebServer() at 
src/MyWebServer.cpp:822
  #16 0x400e5c19:0x3ffccb80 in loop() at src/unetAdapter.cpp:588
  #17 0x40107585:0x3ffccbe0 in loopTask(void*) at 
/Users/klkl/.platformio/packages/framework-arduinoespressif32/cores/esp3 
2/main.cpp:50
--- oder
Guru Meditation Error: Core  0 panic'ed (IllegalInstruction). Exception 
was unhandled.
Memory dump at 0x40090b38: 10c132b3 a90020c0 b81a2c0c
Core  0 register dump:
PC      : 0x40090b3e  PS      : 0x00060034  A0      : 0x80114a3d  A1 
: 0x3ffd3ab0
A2      : 0x00000004  A3      : 0x3ffd3ab8  A4      : 0x00000024  A5 
: 0x3ffd3b20
A6      : 0x00000026  A7      : 0x00000002  A8      : 0x80080346  A9 
: 0xffffffef
A10     : 0xb80fc000  A11     : 0x3ffd3abc  A12     : 0xbffd7abd  A13 
: 0x7ffa7568
A14     : 0x001ff755  A15     : 0x3ffd3cdc  SAR     : 0x0000001e 
EXCCAUSE: 0x00000000
EXCVADDR: 0x00000000  LBEG    : 0x40089e00  LEND    : 0x40089e0b  LCOUNT 
: 0xffffffff


Backtrace: 0x40090b3b:0x3ffd3ab0 0x40114a3a:0x3ffd3af0 
0x40083b15:0x3ffd3b40 0x40084cac:0x3ffd3b60 0x40090674:0x3ffd3c20 
0x22004133:0x3ffd3c40 |<-CORRUPTED

  #0  0x40090b3b:0x3ffd3ab0 in soc_ll_stall_core at 
/Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/hal/esp32/ 
include/hal/soc_ll.h:34
      (inlined by) soc_hal_stall_core at 
/Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/hal/soc_ha 
l.c:29
  #1  0x40114a3a:0x3ffd3af0 in panic_handler at 
/Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/esp_system 
/port/panic_handler.c:158
  #2  0x40083b15:0x3ffd3b40 in xt_unhandled_exception at 
/Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/esp_system 
/port/panic_handler.c:219
  #3  0x40084cac:0x3ffd3b60 in _xt_user_exc at 
/Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/freertos/p 
ort/xtensa/xtensa_vectors.S:703
  #4  0x40090674:0x3ffd3c20 in spinlock_release at 
/Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/esp_hw_sup 
port/include/soc/spinlock.h:164
      (inlined by) vPortExitCritical at 
/Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/freertos/p 
ort/xtensa/port.c:323
  #5  0x22004133:0x3ffd3c40 in ?? ??:0
---

der Stacktrace scheint nicht auf das wirkliche Problem hinzudeuten. Ich 
würde tippen das Ich irgendwo den Stack zerstöre, kann das aber an 
nichts festmachen.

Ganz blöde ist das der Neustart nicht immer funktioniert. Bei jedem ca 
20-50sten Neustart bleibt der Controller noch vor den ersten seriellen 
Ausgaben hängen und es ist ein Hardware-Reset notwendig.

Mit meinem Verständnis eines WD Timer kann Ich meine Beobachtungen gar 
nicht vereinbaren. Ein WD Timer sollte unabhängig vom restlichen Code 
laufen und auch keine Rückwirkungen auf den Programmablauf haben. Nach 
einer Reset-Auslösung sollte der Prozessor immer wieder neu booten....

Hat jemand eine Idee wie Ich dies weiter einkreisen kann?

Vielen Dank schon mal das Ihr bis hierher gelesen habt.
Gruß Klaus

von Obelix X. (obelix)


Lesenswert?

Liegt am Sourcecode main.c Zeile 183.

von Ron-Hardy G. (ron-hardy)


Lesenswert?

Obelix X. schrieb:
> Liegt am Sourcecode main.c Zeile 183.

Sicher? Nicht 42?

von Klaus K. (klkl)


Lesenswert?

hmm, wie kommt Ihr darauf?

der Stacktrace sagt
/Users/klkl/.platformio/packages/framework-arduinoespressif32/cores/esp3
2/main.cpp:50

Das ist aber nicht in meinem Zuständigkeitsbereich

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.