From 21f02a6955cdf6cd37c6c4018e1ed683a95a9abb Mon Sep 17 00:00:00 2001 From: Darian Leung Date: Tue, 20 Jun 2017 20:13:13 +0800 Subject: [PATCH] Bugfix - Panic Handler not halting when running on both cores 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 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/components/esp32/panic.c b/components/esp32/panic.c index 4d8386446..4c3db7fa6 100644 --- a/components/esp32/panic.c +++ b/components/esp32/panic.c @@ -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;