Просмотр исходного кода

Merge branch 'feature/pseudo_exccause_to_openocd' into 'master'

Feature/pseudo exccause to openocd

See merge request espressif/esp-idf!25708
Erhan Kurubas 2 лет назад
Родитель
Сommit
3de31924ac
1 измененных файлов с 19 добавлено и 0 удалено
  1. 19 0
      components/esp_system/panic.c

+ 19 - 0
components/esp_system/panic.c

@@ -62,6 +62,14 @@
 #include "hal/usb_serial_jtag_ll.h"
 #endif
 
+#ifdef __XTENSA__
+#include "xtensa/semihosting.h"
+#elif __riscv
+#include "riscv/semihosting.h"
+#endif
+
+#define ESP_SEMIHOSTING_SYS_PANIC_REASON	0x116
+
 #define MWDT_DEFAULT_TICKS_PER_US       500
 
 bool g_panic_abort = false;
@@ -289,6 +297,17 @@ void esp_panic_handler(panic_info_t *info)
     // then only print up to details. Users should be able to probe for the other information
     // in debug mode.
     if (esp_cpu_dbgr_is_attached()) {
+		char *panic_reason_str = NULL;
+		if (info->pseudo_excause) {
+			panic_reason_str = (char *)info->reason;
+		} else if (g_panic_abort && strlen(g_panic_abort_details)) {
+			panic_reason_str = g_panic_abort_details;
+		}
+		if (panic_reason_str) {
+			/* OpenOCD will print the halt cause when target is stopped at the below breakpoint (info->addr) */
+			long args[] = {(long)panic_reason_str, strlen(panic_reason_str)};
+			semihosting_call_noerrno(ESP_SEMIHOSTING_SYS_PANIC_REASON, args);
+		}
         panic_print_str("Setting breakpoint at 0x");
         panic_print_hex((uint32_t)info->addr);
         panic_print_str(" and returning...\r\n");