/**
* @brief Software Reset digital core.
*
+ * It is not recommended to use this function in esp-idf, use
+ * esp_restart() instead.
+ *
* @param None
*
* @return None
/**
* @brief Software Reset digital core.
*
+ * It is not recommended to use this function in esp-idf, use
+ * esp_restart() instead.
+ *
* @param int cpu_no : The CPU to reset, 0 for PRO CPU, 1 for APP CPU.
*
* @return None
panicPutStr("\n\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.
esp_gdbstub_panic_handler(frame);
#elif 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");
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)
{
esp_wifi_stop();
// Disable scheduler on this core.
vTaskSuspendAll();
+
+ esp_restart_noos();
+}
+
+/* "inner" restart function for after RTOS, interrupts & anything else on this
+ * core are already stopped. Stalls other core, resets hardware,
+ * triggers restart.
+*/
+void IRAM_ATTR esp_restart_noos()
+{
+
const uint32_t core_id = xPortGetCoreID();
const uint32_t other_core_id = core_id == 0 ? 1 : 0;
esp_cpu_stall(other_core_id);