8000 Example: ResetReason2 (#8105) · LBOUDHAR/arduino-esp32@2696a12 · GitHub
[go: up one dir, main page]

Skip to content

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 2696a12

Browse files
Example: ResetReason2 (espressif#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
Lines changed: 64 additions & 0 deletions
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)
0