SensESP 3.4.1-alpha
Universal Signal K sensor toolkit ESP32
Loading...
Searching...
No Matches
reset_info.cpp
Go to the documentation of this file.
2
3#include <esp_attr.h>
4#include <esp_system.h>
5
6namespace sensesp {
7
8namespace {
9// Bumped if the RTC layout below changes, so a stale image reads as a cold boot.
10constexpr uint32_t kRtcMagic = 0x5E5E0001;
11
12// RTC_NOINIT memory is not zeroed at startup and survives panic, watchdog, and
13// software resets (but not power loss), so it carries the watermark across a
14// crash. Guarded by kRtcMagic to reject uninitialised contents after power-up.
15RTC_NOINIT_ATTR uint32_t rtc_magic_;
16RTC_NOINIT_ATTR uint32_t rtc_min_free_heap_;
17
18esp_reset_reason_t reason_ = ESP_RST_UNKNOWN;
19uint32_t min_free_before_reset_ = 0;
20} // namespace
21
23 reason_ = esp_reset_reason();
24 min_free_before_reset_ = (rtc_magic_ == kRtcMagic) ? rtc_min_free_heap_ : 0;
25 rtc_magic_ = kRtcMagic;
26 rtc_min_free_heap_ = esp_get_minimum_free_heap_size();
27}
28
29const char* reset_reason_str() {
30 switch (reason_) {
31 case ESP_RST_POWERON:
32 return "Power-on";
33 case ESP_RST_EXT:
34 return "External pin";
35 case ESP_RST_SW:
36 return "Software restart";
37 case ESP_RST_PANIC:
38 return "Panic/abort";
39 case ESP_RST_INT_WDT:
40 return "Interrupt watchdog";
41 case ESP_RST_TASK_WDT:
42 return "Task watchdog";
43 case ESP_RST_WDT:
44 return "Other watchdog";
45 case ESP_RST_DEEPSLEEP:
46 return "Deep-sleep wake";
47 case ESP_RST_BROWNOUT:
48 return "Brownout";
49 case ESP_RST_SDIO:
50 return "SDIO";
51 default:
52 return "Unknown";
53 }
54}
55
56uint32_t min_free_heap_before_reset() { return min_free_before_reset_; }
57
59 rtc_min_free_heap_ = esp_get_minimum_free_heap_size();
60}
61
62} // namespace sensesp
void begin_reset_info()
Reset-cause and pre-reset heap diagnostics for the status page.
const char * reset_reason_str()
uint32_t min_free_heap_before_reset()
void update_min_free_heap_watermark()