]> granicus.if.org Git - esp-idf/commitdiff
Bugfix - Panic Handler not halting when running on both cores
authorDarian Leung <darian@espressif.com>
Tue, 20 Jun 2017 12:13:13 +0000 (20:13 +0800)
committerDarian Leung <darian@espressif.com>
Wed, 21 Jun 2017 08:58:48 +0000 (16:58 +0800)
Bug occurs when core dump destination in menuconfig is set to flash. When
programme crashes, xt_unhandled_exception or panicHandler will both trigger
commonErrorHandler. commonErrorHandler calls esp_core_dump_to_flash which
will attempt to use DPORT functions and hang due to trying to a stall and already
stalled processor (already stalled in xt_unhandled_exception and panicHandler).
Program will eventually be rebooted when wdt expires.

Added esp_dport_access_int_deinit after calls to haltOtherCore() so that DPORT
functions don't try to halt and already halted cpu hence preventing hang.

Fixes TW#12944 https://github.com/espressif/esp-idf/issues/646

components/esp32/panic.c

index 4d8386446776a59ded92bafa7d60d422c5f6a022..4c3db7fa648255ffc9bcd7d44f11b7958d6728b7 100644 (file)
@@ -197,6 +197,7 @@ void panicHandler(XtExcFrame *frame)
         return;
     }
     haltOtherCore();
+    esp_dport_access_int_deinit();
     panicPutStr("Guru Meditation Error: Core ");
     panicPutDec(core_id);
     panicPutStr(" panic'ed (");
@@ -244,6 +245,7 @@ void panicHandler(XtExcFrame *frame)
 void xt_unhandled_exception(XtExcFrame *frame)
 {
     haltOtherCore();
+    esp_dport_access_int_deinit();
     if (!abort_called) {
         panicPutStr("Guru Meditation Error of type ");
         int exccause = frame->exccause;