Soft WDT reset ctx: cont ....原來 ESP8266 有看門狗計時器 (Watch Dog Timer), 程式會在 loop() 結束或是呼叫 delay() 時更新看門狗計時器, 如果很長一段時間沒有更新看門狗計時器, 就會啟動 reset 機制, 警告你程式某些地方有閒置過久的問題。舉例來說, 如果你在 ESP8266 上跑以下這個在 loop() 中閒置 10 秒的程式:
void setup() { Serial.begin(9600); Serial.println("Begin testing"); } unsigned long prevTime; void loop() { prevTime = millis(); while(millis() - prevTime < 10000); }就會在序列埠監控視窗中看到看門狗計時器 reset 的訊息:
解決的方法很簡單, 只要在閒置區域中呼叫 yield() 或是 delay(0) 就會更新看門狗計時器, 也就不會 reset 了。修改的程式如下:
void setup() { Serial.begin(9600); Serial.println("Begin testing"); } unsigned long prevTime; void loop() { prevTime = millis(); while(millis() - prevTime < 10000) {yield();} }
3 則留言:
敬啟者 你好:
在網路上看到你的大作,剛好我有遇到一個類似的問題,想向你請教一下,看你有沒有類似的經驗可以解決?後面的訊息是我把Arduino IDE中最基本的範例Blink燒進ESP8266 ESP-202這塊模組板後,在監控視窗上所看到的訊息,但我之前買的同樣一塊板子就不會有這個現象,不知道會是什麼原因,該如何解決呢?還請賜教一下,謝謝.
ets Jan 8 2013,rst cause:4, boot mode:(3,6)
wdt reset
load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v09f0c112
~ld
應該不是我文章中程式沒有重置看門狗的問題, 因為 blink 程式在 loop 中不會有什麼延遲, 而每次 loop() 都會更新看門狗。會不會是這片板子製作時的瑕疵?依據網路上找到的資訊, 可以試看看從 3.3V 接 1 個 10KΩ電阻到 GPIO0 再 reset 是不是可以正常運作?
路過,學到,讚!
張貼留言