此時版子會卡住,無法自動重啟,報出如下 圖(一) 訊息
ets Jan 8 2013,rst cause:4, boot mode:(1,6)
wdt reset
接著,按了板上的 Reset 按鈕,仍然過了 8.35 秒觸發 Hardware watchdog 報出訊息
ets Jan 8 2013,rst cause:4, boot mode:(1,6)
wdt reset
但此時版子就會自動重啟了,如下 圖(二)
圖(一)
圖(二)
不使用 ESP.wdtDisable() 關閉 Watchdog 指令的情況下,其 ESP8266 (我使用Wemos D1 mini 進行測試) 會在約 3.2 秒左右觸發 Software watchdog
並報出如下圖訊息
ets Jan 8 2013,rst cause:2, boot mode:(1,6)
ets Jan 8 2013,rst cause:4, boot mode:(1,6)
wdt reset
1.
ESP.wdtDisable() 的看門狗關閉指令針對的是 Software watchdog
ets Jan 8 2013,rst cause:2, boot mode:(1,6) 是由 Software watchdog 所產生
ets Jan 8 2013,rst cause:4, boot mode:(1,6) 是由 Hardware watchdog 所產生
2.
如果在版子上電的一開始我們沒有手動按一下 Reset 按鈕,之後若觸發 Hardware watchdog ,版子就會卡住
解決辦法就是記得在版子上電的一開始手動按一下 Reset 按鈕
3.
若觸發了 Software watchdog 版子會卡一下( 約 5.15 秒),然後觸發 Hardware watchdog
若沒有在版子上電的一開始我們沒有手動按一下 Reset 按鈕,版子就會當機卡住
4.
縱使你使用 ESP.wdtDisable() 關閉 Software watchdog ,但 Hardware watchdog 仍舊沒被關閉,所以你必須在程式碼中的各個角落加入 ESP.wdtFeed(); 來避免看門狗被觸發
補充測試結論
1.
在沒有使用 ESP.wdtDisable(); 來關閉看門狗的前提下
(或使用了 ESP.wdtDisable(); 後,有再使用 ESP.wdtEnable(); 的開啟看門狗指令)
delay(0); 以及 yield(); 效用等同 ESP.wdtFeed();
反之,若使用了 ESP.wdtDisable(); 則只能用 ESP.wdtFeed(); 來避免看門狗被觸發
我將定期推出程式語言的新手教學影片