]> granicus.if.org Git - esp-idf/commitdiff
Merge branch 'bugfix/panic_reset_hangs' into 'master'
authorIvan Grokhotkov <ivan@espressif.com>
Mon, 16 Jan 2017 02:40:47 +0000 (10:40 +0800)
committerIvan Grokhotkov <ivan@espressif.com>
Mon, 16 Jan 2017 02:40:47 +0000 (10:40 +0800)
Panic handler: Use same reset path as esp_restart(), disabling hardware

Closes #223 https://github.com/espressif/esp-idf/issues/223

See merge request !417

1  2 
components/esp32/panic.c
components/esp32/system_api.c

index 22a515a3523693e944c5bce1c3fca740c01bb5c2,dcf7ba8d7e8d2ca53790f5780ed57d9c6e79b19a..6180770bd674cc4c89ed4a4489ccef6a473e51fa
@@@ -318,9 -317,11 +318,11 @@@ static void doBacktrace(XtExcFrame *fra
              break;
          }
      }
 -    panicPutStr("\n\n");
 +    panicPutStr("\r\n\r\n");
  }
  
+ void esp_restart_noos() __attribute__ ((noreturn));
  /*
    We arrive here after a panic or unhandled exception, when no OCD is detected. Dump the registers to the
    serial port and either jump to the gdb stub, halt the CPU or reboot.
@@@ -364,19 -365,9 +366,16 @@@ static void commonErrorHandler(XtExcFra
      disableAllWdts();
      panicPutStr("Entering gdb stub now.\r\n");
      esp_gdbstub_panic_handler(frame);
 -#elif CONFIG_ESP32_PANIC_PRINT_REBOOT || CONFIG_ESP32_PANIC_SILENT_REBOOT
 +#else
 +#if CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH
 +    esp_core_dump_to_flash(frame);
 +#endif
 +#if CONFIG_ESP32_ENABLE_COREDUMP_TO_UART && !CONFIG_ESP32_PANIC_SILENT_REBOOT
 +    esp_core_dump_to_uart(frame);
 +#endif
 +#if CONFIG_ESP32_PANIC_PRINT_REBOOT || CONFIG_ESP32_PANIC_SILENT_REBOOT
      panicPutStr("Rebooting...\r\n");
-     for (x = 0; x < 100; x++) {
-         ets_delay_us(1000);
-     }
-     software_reset();
+     esp_restart_noos();
  #else
      disableAllWdts();
      panicPutStr("CPU halted.\r\n");
index bfc0f0752792b56710658b9ab75e6c4d53f42174,55fe026591ecc7166c60dc6c7d94a3627af88d88..2f834a9eac571b84e80ed99bfad33223e457294a
@@@ -73,11 -72,11 +73,13 @@@ esp_err_t esp_efuse_read_mac(uint8_t* m
  esp_err_t system_efuse_read_mac(uint8_t mac[6]) __attribute__((alias("esp_efuse_read_mac")));
  
  
+ void esp_restart_noos() __attribute__ ((noreturn));
  void IRAM_ATTR esp_restart(void)
  {
 +#ifdef CONFIG_WIFI_ENABLED
      esp_wifi_stop();
 +#endif
  
      // Disable scheduler on this core.
      vTaskSuspendAll();