文章程式碼顯示

2018年12月29日 星期六

NodeMCU 教學 - 17:ESP8266 看門狗 WatchDog 關閉 ESP.wdtDisable() 使用法則

使用  ESP.wdtDisable() 關閉 Watchdog 指令的情況下,其 ESP8266 仍然會在約 8.35 秒左右觸發 Watchdog ,而這個 Watchdog 屬於 Hardware watchdog

此時版子會卡住,無法自動重啟,報出如下 圖(一) 訊息

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(); 來避免看門狗被觸發



我的 Youtube 頻道,一定要訂閱
我將定期推出程式語言的新手教學影片


↓↓↓ 連結到部落格方針與索引 ↓↓↓

Blog 使用方針與索引