From e3f1ce6cdb4f71e0f8a794e5f5529cfca18db571 Mon Sep 17 00:00:00 2001 From: David McCurley <44048235+mrengineer7777@users.noreply.github.com> Date: Fri, 21 Apr 2023 17:15:06 -0500 Subject: [PATCH 1/2] Create ResetReason2.ino --- .../examples/ResetReason/ResetReason2.ino | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 libraries/ESP32/examples/ResetReason/ResetReason2.ino diff --git a/libraries/ESP32/examples/ResetReason/ResetReason2.ino b/libraries/ESP32/examples/ResetReason/ResetReason2.ino new file mode 100644 index 00000000000..e0aa81ad523 --- /dev/null +++ b/libraries/ESP32/examples/ResetReason/ResetReason2.ino @@ -0,0 +1,64 @@ +//---------------------------------------------------------------------------------- +// ResetReason2.ino +// +// Prints last reset reason of ESP32 +// This uses the mechanism in IDF that persists crash reasons across a reset. +// See https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/misc_system_api.html#software-reset +// +// This example uses esp_reset_reason() instead of rtc_get_reset_reason(0). +// This example forces a WDT timeout in 10s. +// +// Note enableLoopWDT() cannot be used here because it also takes care of +// resetting WDT. See cores/esp32/main.cpp::loopTask(). +// +// Author: David McCurley +// Public Domain License +//---------------------------------------------------------------------------------- +// 2023.04.21 r1.0 Initial release +//---------------------------------------------------------------------------------- + +#include "esp_task_wdt.h" + +//Converts reason type to a C string. +//Type is located in /tools/sdk/esp32/include/esp_system/include/esp_system.h +const char * resetReasonName(esp_reset_reason_t r) { + switch(r) { + case ESP_RST_UNKNOWN: return "Unknown"; + case ESP_RST_POWERON: return "PowerOn"; //Power on or RST pin toggled + case ESP_RST_EXT: return "ExtPin"; //External pin - not applicable for ESP32 + case ESP_RST_SW: return "Reboot"; //esp_restart() + case ESP_RST_PANIC: return "Crash"; //Exception/panic + case ESP_RST_INT_WDT: return "WDT_Int"; //Interrupt watchdog (software or hardware) + case ESP_RST_TASK_WDT: return "WDT_Task"; //Task watchdog + case ESP_RST_WDT: return "WDT_Other"; //Other watchdog + case ESP_RST_DEEPSLEEP: return "Sleep"; //Reset after exiting deep sleep mode + case ESP_RST_BROWNOUT: return "BrownOut"; //Brownout reset (software or hardware) + case ESP_RST_SDIO: return "SDIO"; //Reset over SDIO + default: return ""; + } +} + +void PrintResetReason(void) { + esp_reset_reason_t r = esp_reset_reason(); + if(r==ESP_RST_POWERON) { + delay(6000); //Wait for serial monitor to connect + } + Serial.printf("\r\nReset reason %i - %s\r\n", r, resetReasonName(r)); +} + +void setup() { + Serial.begin(115200); + PrintResetReason(); + + //Start WDT monitor + if(esp_task_wdt_add(NULL) != ESP_OK) { + log_e("Failed to add current task to WDT"); + } +} + +//Enable esp_task_wdt_reset() below to prevent a WDT reset +void loop() { + Serial.printf("Alive %lums\r\n", millis()); + //esp_task_wdt_reset(); + delay(1000); //1s delay +} \ No newline at end of file From 346face1e8c7121415ffb8860ea08f5081e474b9 Mon Sep 17 00:00:00 2001 From: David McCurley <44048235+mrengineer7777@users.noreply.github.com> Date: Fri, 21 Apr 2023 17:42:38 -0500 Subject: [PATCH 2/2] Separate Reset Examples Moved examples to separate sub folders --- .../ESP32/examples/ResetReason/{ => ResetReason}/ResetReason.ino | 0 .../examples/ResetReason/{ => ResetReason2}/ResetReason2.ino | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename libraries/ESP32/examples/ResetReason/{ => ResetReason}/ResetReason.ino (100%) rename libraries/ESP32/examples/ResetReason/{ => ResetReason2}/ResetReason2.ino (100%) diff --git a/libraries/ESP32/examples/ResetReason/ResetReason.ino b/libraries/ESP32/examples/ResetReason/ResetReason/ResetReason.ino similarity index 100% rename from libraries/ESP32/examples/ResetReason/ResetReason.ino rename to libraries/ESP32/examples/ResetReason/ResetReason/ResetReason.ino diff --git a/libraries/ESP32/examples/ResetReason/ResetReason2.ino b/libraries/ESP32/examples/ResetReason/ResetReason2/ResetReason2.ino similarity index 100% rename from libraries/ESP32/examples/ResetReason/ResetReason2.ino rename to libraries/ESP32/examples/ResetReason/ResetReason2/ResetReason2.ino