diff --git a/ports/esp32/CMakeLists.txt b/ports/esp32/CMakeLists.txt index 1537c1d723..3fe0830025 100644 --- a/ports/esp32/CMakeLists.txt +++ b/ports/esp32/CMakeLists.txt @@ -59,5 +59,8 @@ include($ENV{IDF_PATH}/tools/cmake/project.cmake) # Set the location of the main component for the project (one per target). list(APPEND EXTRA_COMPONENT_DIRS main_${IDF_TARGET}) +# Enable the panic handler wrapper +idf_build_set_property(LINK_OPTIONS "-Wl,--wrap=esp_panic_handler" APPEND) + # Define the project. project(micropython) diff --git a/ports/esp32/esp32_common.cmake b/ports/esp32/esp32_common.cmake index 89e46f9cfb..e928fb439d 100644 --- a/ports/esp32/esp32_common.cmake +++ b/ports/esp32/esp32_common.cmake @@ -53,6 +53,7 @@ list(APPEND MICROPY_SOURCE_DRIVERS ) list(APPEND MICROPY_SOURCE_PORT + panichandler.c adc.c main.c ppp_set_auth.c diff --git a/ports/esp32/panichandler.c b/ports/esp32/panichandler.c new file mode 100644 index 0000000000..1998c10746 --- /dev/null +++ b/ports/esp32/panichandler.c @@ -0,0 +1,42 @@ +#include "genhdr/mpversion.h" +#include "py/mpconfig.h" + +#ifdef MICROPY_BUILD_TYPE +#define MICROPY_BUILD_TYPE_PAREN " (" MICROPY_BUILD_TYPE ")" +#else +#define MICROPY_BUILD_TYPE_PAREN +#endif + +#ifdef CONFIG_ESP_PANIC_HANDLER_IRAM +#define MICROPY_WRAP_PANICHANDLER_FUN(f) IRAM_ATTR f +#define MICROPY_WRAP_PANICHANDLER_STR(s) DRAM_STR(s) +#else +#define MICROPY_WRAP_PANICHANDLER_FUN(f) f +#define MICROPY_WRAP_PANICHANDLER_STR(s) (s) +#endif + +void __real_esp_panic_handler(void *); +void esp_panic_handler_reconfigure_wdts(uint32_t timeout_ms); +void panic_print_str(const char *str); + +void MICROPY_WRAP_PANICHANDLER_FUN(__wrap_esp_panic_handler)(void *info) { + esp_panic_handler_reconfigure_wdts(1000); + + const static char *msg = MICROPY_WRAP_PANICHANDLER_STR( + "\r\n" + "A fatal error occurred. The crash dump printed below may be used to help\r\n" + "determine what caused it. If you are not already running the most recent\r\n" + "version of MicroPython, consider upgrading. New versions often fix bugs.\r\n" + "\r\n" + "To learn more about how to debug and/or report this crash visit the wiki\r\n" + "page at: https://github.com/micropython/micropython/wiki/ESP32-debugging\r\n" + "\r\n" + "MPY version : " MICROPY_GIT_TAG " on " MICROPY_BUILD_DATE MICROPY_BUILD_TYPE_PAREN "\r\n" + "IDF version : " IDF_VER "\r\n" + "Machine : " MICROPY_HW_BOARD_NAME " with " MICROPY_HW_MCU_NAME "\r\n" + "\r\n" + ); + panic_print_str(msg); + + __real_esp_panic_handler(info); +}