summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/esp32/CMakeLists.txt3
-rw-r--r--ports/esp32/esp32_common.cmake1
-rw-r--r--ports/esp32/panichandler.c68
3 files changed, 72 insertions, 0 deletions
diff --git a/ports/esp32/CMakeLists.txt b/ports/esp32/CMakeLists.txt
index 1537c1d72..3fe083002 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 89e46f9cf..e928fb439 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 000000000..e6ff98ded
--- /dev/null
+++ b/ports/esp32/panichandler.c
@@ -0,0 +1,68 @@
+/*
+ * This file is part of the MicroPython project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2024 Mindhash B.V.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#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);
+}