mirror of https://github.com/arendst/Tasmota.git
Add more crash dump information
This commit is contained in:
parent
ba1afe979b
commit
ab167b0974
|
@ -60,3 +60,4 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
|
|||
- Add SerialConfig to ``Status 1``
|
||||
- Add WifiPower to ``Status 5``
|
||||
- Add support for DS1624, DS1621 Temperature sensor by Leonid Myravjev
|
||||
- Add Zigbee attribute decoder for Xiaomi Aqara Cube
|
||||
|
|
|
@ -57,8 +57,13 @@ void OsWatchTicker(void)
|
|||
// AddLog_P(LOG_LEVEL_INFO, PSTR(D_LOG_APPLICATION D_OSWATCH " " D_BLOCKED_LOOP ". " D_RESTARTING)); // Save iram space
|
||||
RtcSettings.oswatch_blocked_loop = 1;
|
||||
RtcSettingsSave();
|
||||
|
||||
// ESP.restart(); // normal reboot
|
||||
ESP.reset(); // hard reset
|
||||
// ESP.reset(); // hard reset
|
||||
|
||||
// Force an exception to get a stackdump
|
||||
volatile uint32_t dummy;
|
||||
dummy = *((uint32_t*) 0x00000000);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -333,9 +333,7 @@ void CmndStatus(void)
|
|||
|
||||
if ((!Settings.flag.mqtt_enabled) && (6 == payload)) { payload = 99; } // SetOption3 - Enable MQTT
|
||||
if (!energy_flg && (9 == payload)) { payload = 99; }
|
||||
|
||||
bool exception_flg = (ResetReason() == REASON_EXCEPTION_RST) || (ResetReason() == REASON_SOFT_WDT_RST);
|
||||
if (!exception_flg && (12 == payload)) { payload = 99; }
|
||||
if (!CrashFlag() && (12 == payload)) { payload = 99; }
|
||||
|
||||
if ((0 == payload) || (99 == payload)) {
|
||||
uint32_t maxfn = (devices_present > MAX_FRIENDLYNAMES) ? MAX_FRIENDLYNAMES : (!devices_present) ? 1 : devices_present;
|
||||
|
@ -482,7 +480,7 @@ void CmndStatus(void)
|
|||
MqttPublishPrefixTopic_P(option, PSTR(D_CMND_STATUS "11"));
|
||||
}
|
||||
|
||||
if (exception_flg) {
|
||||
if (CrashFlag()) {
|
||||
if ((0 == payload) || (12 == payload)) {
|
||||
Response_P(PSTR("{\"" D_CMND_STATUS D_STATUS12_STATUS "\":"));
|
||||
CrashDump();
|
||||
|
@ -578,6 +576,9 @@ void CmndRestart(void)
|
|||
case -2:
|
||||
CmndWDT();
|
||||
break;
|
||||
case -3:
|
||||
CmndBlockedLoop();
|
||||
break;
|
||||
case 99:
|
||||
AddLog_P(LOG_LEVEL_INFO, PSTR(D_LOG_APPLICATION D_RESTARTING));
|
||||
EspRestart();
|
||||
|
|
|
@ -50,7 +50,7 @@ void CmndCrash(void)
|
|||
dummy = *((uint32_t*) 0x00000000);
|
||||
}
|
||||
|
||||
// do an infinite loop to trigger WDT watchdog
|
||||
// Do an infinite loop to trigger WDT watchdog
|
||||
void CmndWDT(void)
|
||||
{
|
||||
volatile uint32_t dummy = 0;
|
||||
|
@ -59,6 +59,14 @@ void CmndWDT(void)
|
|||
}
|
||||
}
|
||||
|
||||
// This will trigger the os watch after OSWATCH_RESET_TIME (=120) seconds
|
||||
void CmndBlockedLoop(void)
|
||||
{
|
||||
while (1) {
|
||||
delay(1000);
|
||||
}
|
||||
}
|
||||
|
||||
// Clear the RTC dump counter when we do a normal reboot, this avoids garbage data to stay in RTC
|
||||
void CrashDumpClear(void)
|
||||
{
|
||||
|
@ -70,6 +78,11 @@ void CrashDumpClear(void)
|
|||
* CmndCrashDump - dump the crash history - called by `Status 12`
|
||||
\*********************************************************************************************/
|
||||
|
||||
bool CrashFlag(void)
|
||||
{
|
||||
return ((ResetReason() == REASON_EXCEPTION_RST) || (ResetReason() == REASON_SOFT_WDT_RST) || oswatch_blocked_loop);
|
||||
}
|
||||
|
||||
void CrashDump(void)
|
||||
{
|
||||
ResponseAppend_P(PSTR("{\"Exception\":%d,\"Reason\":\"%s\",\"EPC\":[\"%08x\",\"%08x\",\"%08x\"],\"EXCVADDR\":\"%08x\",\"DEPC\":\"%08x\""),
|
||||
|
|
|
@ -532,7 +532,7 @@ void MqttConnected(void)
|
|||
}
|
||||
#endif // USE_WEBSERVER
|
||||
Response_P(PSTR("{\"" D_JSON_RESTARTREASON "\":"));
|
||||
if (ResetReason() == REASON_EXCEPTION_RST) {
|
||||
if (CrashFlag()) {
|
||||
CrashDump();
|
||||
} else {
|
||||
ResponseAppend_P(PSTR("\"%s\""), GetResetReason().c_str());
|
||||
|
|
Loading…
Reference in New Issue