NodeMCU程式出現錯誤時,可能會導致ESP8266不停地重啟,並且重啟速度太快以至於我們都無法刪除板子里的原代碼(甚至重新刷ROM也無法刷入),更無法重新寫入程式。為避免這種情況,可採用如下方法: ...
在玩ESP8266時,有時候會無意中寫了導致死迴圈的代碼,或都某些函數傳遞了不合適的參數導致系統崩潰,這可能會導致ES8266不停地重啟,這時我們發現無法刷入新的代碼,也無法刪除8266中的原代碼。我曾經就因為這個問題報廢了塊板子。。。心痛。。。
後來通過在網上找相關資料以及自己分析,總結了以下兩個方法去避免以上情況:
原因分析:NodeMCU程式出現錯誤時,可能會導致ESP8266不停地重啟,並且重啟速度太快以至於我們都無法刪除板子里的原代碼(甚至重新刷ROM也無法刷入),更無法重新寫入程式。為避免這種情況,可採用如下方法:
方法一:可以在開發調試階段,在文件頭加入如下代碼:
gpio.mode(1,gpio.INPUT)
v=gpio.read(1)
print("--Security Port D1:"..v)
if(v==1) then
file.remove("init.lua")
print("--file init.lua removed.")
end
當無法刷入程式時,我們可以將GPIO1置為高電平,系統重啟時便會自動刪除代碼文件。
方法二:.將核心代碼不要放在init.lua中,啟動時在init.lua中延遲一段時間後調用核心代碼文件。
tmr.alarm(0, 2000, 0, function()
dofile("code.lua") ---載入的模塊文件
end)
這樣在核心代碼出問題且無法刷入新的代碼時,重啟模塊利用init.lua中的延遲間隔重新覆蓋核心代碼。
-----------------
By: ShadowlessWalker 2020年1月11日