Quellcode durchsuchen

refactor(esp_system) add user configurable reboot delay in seconds

Closes https://github.com/espressif/esp-idf/pull/9962
Chip Weinberger vor 3 Jahren
Ursprung
Commit
6e2ce0d289
2 geänderte Dateien mit 29 neuen und 0 gelöschten Zeilen
  1. 8 0
      components/esp_system/Kconfig
  2. 21 0
      components/esp_system/panic.c

+ 8 - 0
components/esp_system/Kconfig

@@ -48,6 +48,14 @@ menu "ESP System Settings"
                 Invoke gdbstub on the serial port, allowing for gdb to attach to it and to do a debug on runtime.
     endchoice
 
+    config ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS
+        int "Panic reboot delay (Seconds)"
+        default 0
+        depends on ESP_SYSTEM_PANIC_PRINT_REBOOT || ESP_SYSTEM_PANIC_SILENT_REBOOT
+        help
+            After the panic handler executes, you can specify a number of seconds to
+            wait before the device reboots.
+
     config ESP_SYSTEM_SINGLE_CORE_MODE
         bool
         default n

+ 21 - 0
components/esp_system/panic.c

@@ -383,6 +383,27 @@ void esp_panic_handler(panic_info_t *info)
     wdt_hal_write_protect_enable(&rtc_wdt_ctx);
 #if CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT || CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT
 
+#if CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS
+
+    disable_all_wdts();
+
+    panic_print_str("Waiting to reboot...\r\n");
+
+    for(int i = 0; i < CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS; i++) {
+
+        // Display a progress countdown.
+        // Only print every 5th second so users terminal is still "calm".
+        if (i % 5 == 0) {
+            panic_print_dec(CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS - i);
+            panic_print_str(" seconds...\r\n");
+        }
+
+        esp_rom_delay_us(1000000);
+    }
+
+    esp_panic_handler_reconfigure_wdts();
+#endif /* CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS */
+
     if (esp_reset_reason_get_hint() == ESP_RST_UNKNOWN) {
         switch (info->exception) {
         case PANIC_EXCEPTION_IWDT: