fix(panic_handler): Fixed a issue where the system reboots before halt

This commit fixes an issue where the panic handler may reboot even if it
is configured to halt the CPU.

Closes https://github.com/espressif/esp-idf/issues/17260
This commit is contained in:
Sudeep Mohanty
2025-08-12 11:30:15 +02:00
parent 78f2b2ad10
commit 36eaa2c4a1

View File

@@ -262,6 +262,14 @@ static inline void disable_all_wdts(void)
wdt_hal_write_protect_enable(&rtc_wdt_ctx); wdt_hal_write_protect_enable(&rtc_wdt_ctx);
} }
/* IRAM-only halt stub: reset modules, then loop */
void IRAM_ATTR esp_panic_handler_reset_modules_on_exit_and_halt(void)
{
// Do not print or call non-IRAM functions beyond this point
esp_system_reset_modules_on_exit();
ESP_INFINITE_LOOP();
}
/********************** Panic handler functions **********************/ /********************** Panic handler functions **********************/
/* This function is called from the panic handler entry point to increment the panic entry count */ /* This function is called from the panic handler entry point to increment the panic entry count */
@@ -455,10 +463,10 @@ void esp_panic_handler(panic_info_t *info)
panic_print_str("Rebooting...\r\n"); panic_print_str("Rebooting...\r\n");
panic_restart(); panic_restart();
#else /* CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT || CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT */ #else /* CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT || CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT */
esp_panic_handler_feed_wdts();
panic_print_str("CPU halted.\r\n"); panic_print_str("CPU halted.\r\n");
esp_system_reset_modules_on_exit();
disable_all_wdts(); disable_all_wdts();
ESP_INFINITE_LOOP(); esp_panic_handler_reset_modules_on_exit_and_halt();
#endif /* CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT || CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT */ #endif /* CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT || CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT */
#endif /* CONFIG_ESP_SYSTEM_PANIC_GDBSTUB */ #endif /* CONFIG_ESP_SYSTEM_PANIC_GDBSTUB */
} }