如何恢复nodemcu无限循环
How to recover nodemcu infinite loop
我在 nodemcu/ESP8266 板上用无限循环加载 init.lua 时出错。
然后板子继续重启,没有执行任何其他指令。
i = 10
timerId = 0
timerDelay = 30000 -- Milisec
pin = 5
gpio.mode(pin,gpio.INPUT)
repeat(
print(gpio.read(pin))
i = i + 1
end)
until i < 5
我试过刷板
python esptool.py -p /dev/tty.wchusbserial1450 run
python esptool.py -p /dev/tty.wchusbserial1450 write_flash 0x0000 ../nodemcu_latest.bin
然后修复我的代码并再次加载它,现在工作正常
没有一种优雅的恢复方式。
最好的办法是以一种方式构建,以防止您的代码在紧急情况下声明。例如,正如 TerryE 建议的那样,使用 init.lua
中的 timer.alarm
设置一个单次计时器,以足够长的延迟调用主代码,以便在您不这样做的情况下调用 timer.stop
不想启动到您的主代码。
我做的是使用 ESPlorer(Java 应用程序)http://esp8266.ru/esplorer/#download
虽然我在闲逛,但我的 init.lua
文件名为 init1.lua
,如果 ESP 重新启动没问题,您只需单击右侧显示的 init1.lua
按钮手边(使用 "Reload" 按钮显示文件系统内容后)
非常简单,完成后您可以右键单击该文件将其重命名回 init.lua
。
--This file is init.lua
local IDLE_AT_STARTUP_MS = 10000;
tmr.alarm(1,IDLE_AT_STARTUP_MS,0,function()
dofile("program.lua")--Write your program name in dofile
end)
我确实使用这个策略来防止在出现错误时在启动时无限循环。将此文件另存为 init.lua 并将程序写入 program.lua
我遇到了同样的问题,陷入了 while
循环。
刷新不同的固件对我有用。
此答案与 but uses OO API timers 基本相同,因为上面使用的答案已于 2019 年删除。
--This file is init.lua
local IDLE_AT_STARTUP_MS = 10000;
tmr.create():alarm(IDLE_AT_STARTUP_MS, tmr.ALARM_SINGLE,function()
dofile("program.lua")--Write your program name in dofile
end)
我在 nodemcu/ESP8266 板上用无限循环加载 init.lua 时出错。
然后板子继续重启,没有执行任何其他指令。
i = 10
timerId = 0
timerDelay = 30000 -- Milisec
pin = 5
gpio.mode(pin,gpio.INPUT)
repeat(
print(gpio.read(pin))
i = i + 1
end)
until i < 5
我试过刷板
python esptool.py -p /dev/tty.wchusbserial1450 run
python esptool.py -p /dev/tty.wchusbserial1450 write_flash 0x0000 ../nodemcu_latest.bin
然后修复我的代码并再次加载它,现在工作正常
没有一种优雅的恢复方式。
最好的办法是以一种方式构建,以防止您的代码在紧急情况下声明。例如,正如 TerryE 建议的那样,使用 init.lua
中的 timer.alarm
设置一个单次计时器,以足够长的延迟调用主代码,以便在您不这样做的情况下调用 timer.stop
不想启动到您的主代码。
我做的是使用 ESPlorer(Java 应用程序)http://esp8266.ru/esplorer/#download
虽然我在闲逛,但我的 init.lua
文件名为 init1.lua
,如果 ESP 重新启动没问题,您只需单击右侧显示的 init1.lua
按钮手边(使用 "Reload" 按钮显示文件系统内容后)
非常简单,完成后您可以右键单击该文件将其重命名回 init.lua
。
--This file is init.lua
local IDLE_AT_STARTUP_MS = 10000;
tmr.alarm(1,IDLE_AT_STARTUP_MS,0,function()
dofile("program.lua")--Write your program name in dofile
end)
我确实使用这个策略来防止在出现错误时在启动时无限循环。将此文件另存为 init.lua 并将程序写入 program.lua
我遇到了同样的问题,陷入了 while
循环。
刷新不同的固件对我有用。
此答案与
--This file is init.lua
local IDLE_AT_STARTUP_MS = 10000;
tmr.create():alarm(IDLE_AT_STARTUP_MS, tmr.ALARM_SINGLE,function()
dofile("program.lua")--Write your program name in dofile
end)