Skip to content

Commit 2696a12

Browse files
Example: ResetReason2 (#8105)
* Create ResetReason2.ino * Separate Reset Examples Moved examples to separate sub folders
1 parent 67c027c commit 2696a12

File tree

2 files changed

+64
-0
lines changed

2 files changed

+64
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
//----------------------------------------------------------------------------------
2+
// ResetReason2.ino
3+
//
4+
// Prints last reset reason of ESP32
5+
// This uses the mechanism in IDF that persists crash reasons across a reset.
6+
// See https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/misc_system_api.html#software-reset
7+
//
8+
// This example uses esp_reset_reason() instead of rtc_get_reset_reason(0).
9+
// This example forces a WDT timeout in 10s.
10+
//
11+
// Note enableLoopWDT() cannot be used here because it also takes care of
12+
// resetting WDT. See cores/esp32/main.cpp::loopTask().
13+
//
14+
// Author: David McCurley
15+
// Public Domain License
16+
//----------------------------------------------------------------------------------
17+
// 2023.04.21 r1.0 Initial release
18+
//----------------------------------------------------------------------------------
19+
20+
#include "esp_task_wdt.h"
21+
22+
//Converts reason type to a C string.
23+
//Type is located in /tools/sdk/esp32/include/esp_system/include/esp_system.h
24+
const char * resetReasonName(esp_reset_reason_t r) {
25+
switch(r) {
26+
case ESP_RST_UNKNOWN: return "Unknown";
27+
case ESP_RST_POWERON: return "PowerOn"; //Power on or RST pin toggled
28+
case ESP_RST_EXT: return "ExtPin"; //External pin - not applicable for ESP32
29+
case ESP_RST_SW: return "Reboot"; //esp_restart()
30+
case ESP_RST_PANIC: return "Crash"; //Exception/panic
31+
case ESP_RST_INT_WDT: return "WDT_Int"; //Interrupt watchdog (software or hardware)
32+
case ESP_RST_TASK_WDT: return "WDT_Task"; //Task watchdog
33+
case ESP_RST_WDT: return "WDT_Other"; //Other watchdog
34+
case ESP_RST_DEEPSLEEP: return "Sleep"; //Reset after exiting deep sleep mode
35+
case ESP_RST_BROWNOUT: return "BrownOut"; //Brownout reset (software or hardware)
36+
case ESP_RST_SDIO: return "SDIO"; //Reset over SDIO
37+
default: return "";
38+
}
39+
}
40+
41+
void PrintResetReason(void) {
42+
esp_reset_reason_t r = esp_reset_reason();
43+
if(r==ESP_RST_POWERON) {
44+
delay(6000); //Wait for serial monitor to connect
45+
}
46+
Serial.printf("\r\nReset reason %i - %s\r\n", r, resetReasonName(r));
47+
}
48+
49+
void setup() {
50+
Serial.begin(115200);
51+
PrintResetReason();
52+
53+
//Start WDT monitor
54+
if(esp_task_wdt_add(NULL) != ESP_OK) {
55+
log_e("Failed to add current task to WDT");
56+
}
57+
}
58+
59+
//Enable esp_task_wdt_reset() below to prevent a WDT reset
60+
void loop() {
61+
Serial.printf("Alive %lums\r\n", millis());
62+
//esp_task_wdt_reset();
63+
delay(1000); //1s delay
64+
}

0 commit comments

Comments
 (0)