ESP8266莫名其妙地reset?大概是因为没有喂狗!

JiaoKan 发布于 2022-04-11 1 次阅读


绪论

为了防止单片机运行时出错卡住而不能恢复,不少单片机都从物理电路上或者软件上做了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了

此作者没有提供个人介绍。
最后更新于 2024-03-11