绪论
为了防止单片机运行时出错卡住而不能恢复,不少单片机都从物理电路上或者软件上做了watchdog
在ESP8266中,正好有这么个软件定义的watchdog,当检测到系统长期未完成一个loop的时候会自动reset
解决办法
下面这一段代码可以复现这个问题:
#include <ESP8266WiFi.h>
void setup() {
Serial.begin(115200);
while (1) {}
}
void loop() {
}
上传之后,观察串口监视器,发现watchdog将单片机reset:
--------------- CUT HERE FOR EXCEPTION DECODER ---------------
Soft WDT reset
>>>stack>>>
ctx: cont
sp: 3ffffdf0 end: 3fffffc0 offset: 01a0
3fffff90: 3fffdad0 00000000 3ffee51c 4020103c
3fffffa0: feefeffe feefeffe feefeffe 402017e8
3fffffb0: feefeffe feefeffe 3ffe85d8 40100b51
<<<stack<<<
--------------- CUT HERE FOR EXCEPTION DECODER ---------------
ets Jan 8 2013,rst cause:2, boot mode:(3,6)
load 0x4010f000, len 3460, room 16
tail 4
chksum 0xcc
load 0x3fff20b8, len 40, room 4
tail 4
chksum 0xc9
csum 0xc9
v00041b20
~ld
在官方提供的库里面有提供system_soft_wdt_feed();
这一函数来解决这一问题,具体使用方法可以参考如下代码:
#include <ESP8266WiFi.h>
void setup() {
Serial.begin(115200);
while (1) {system_soft_wdt_feed();}
}
void loop() {
}
上传运行,观察串口监视器,你会发现它不会再自动reset了
Comments NOTHING