Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 如何从NodeMCU中的无限重启循环中恢复?_Loops_Reboot - Fatal编程技术网

Loops 如何从NodeMCU中的无限重启循环中恢复?

Loops 如何从NodeMCU中的无限重启循环中恢复?,loops,reboot,Loops,Reboot,我的NodeMCU程序进入无限重启循环 我的代码在功能上正常工作,但我尝试执行的任何操作,例如file.remove(“init.lua”)或甚至只是=node.heap(),它会崩溃并重新启动,并说:崩溃:调用lua API时出现未受保护的错误(内存不足) 因此,我无法更改任何代码或删除init.lua以停止自动代码执行 如何恢复?我尝试重新刷新另一个版本的NodeMCU,但它开始在串行端口中释放垃圾 然后,我回忆起NodeMCU有两个额外的文件:blank.bin和esp\u init\u

我的NodeMCU程序进入无限重启循环

我的代码在功能上正常工作,但我尝试执行的任何操作,例如
file.remove(“init.lua”)
或甚至只是
=node.heap()
,它会崩溃并重新启动,并说:
崩溃:调用lua API时出现未受保护的错误(内存不足)

因此,我无法更改任何代码或删除
init.lua
以停止自动代码执行


如何恢复?

我尝试重新刷新另一个版本的NodeMCU,但它开始在串行端口中释放垃圾

然后,我回忆起NodeMCU有两个额外的文件:
blank.bin
esp\u init\u data\u default.bin

我分别在
0x7E000
0x7C000
处闪烁它们

它们还可以在NodeMCU闪光器中作为
INTERNAL://BLANK
INTERNAL://DEFAULT
使用


这启动了新的NodeMCU固件,我所有的文件都不见了,我退出了无限重启循环。

唯一对我有效的想法是ubuntu中的python flash工具esptool,windows flash工具从未删除init.lua和重启循环

命令(ubuntu):

nodemcu_latest.bin可以从github或任何地方下载

sudo python esptool.py -p /dev/ttyUSB0 --baud 460800 write_flash --flash_size=8m 0 nodemcu_latest.bin

刷新以下文件:

0x00000.bin到0x00000

0x10000.bin到0x10000

而且,esp_init_data_default.bin的地址取决于模块闪存的大小

512 kB的0x7c000,如ESP-01、-03、-07等模块

0xfc000表示1 MB,模块如ESP8285、PSF-A85

0x1fc000用于2 MB

0x3fc000用于4MB,模块如ESP-12E、NodeMCU devkit 1.0、WeMos D1 mini

然后,在刷新这些二进制文件之后,在刷新任何其他二进制文件之前,格式化其文件系统(使用运行“file.format()”


我刚刚解决了一个类似的问题。在我的例子中,是最终用户错误导致需要强制擦除
init.lua
,但我认为这两个问题可以类似地解决。(为了完整起见,我的问题是在
init.lua
中调用了一个太短的
dsleep()

我尝试刷新新的NodeMCU固件,将
blank.bin
esp_init_data\u default.bin
写入
0x7E000
0x7C000
,并将
0x00000.bin
写入
0x00000
0x10000.bin
写入
0x10000
。在我的情况下,这些事情都没有帮助

我的硬件是Adafruit Huzzah ESP8266(ESP-12),带有4MB闪存

对我起作用的是:

  • 从Espressif下载NonosSDK(我使用了来自的1.5.2版)
  • 将其解压缩到
    boot\u v1.2.bin
    user1.1024.new.2.bin
    blank.bin
    ,和
    esp\u init\u data\u default.bin
    (在bin/和bin/at/下)
  • 将以下文件闪存到指定的内存位置:
  • boot_v1.2.bin
    0x00000
  • user1.1024.new.2.bin
    to
    0x010000
  • esp_init_data_default.bin
    0xfc000
  • blank.bin
    0x7e000
  • 关于闪烁的注意事项:
    • 我使用了
      esptool.py
      1.2.1
    • 由于我的问题的性质,我只能在编程模式下(即在GPIO0保持为GND的情况下引导)写入闪存的更改
    • 我发现我需要在每个步骤之间重置电路板(否则在第一步之后调用
      esptool.py
      会失败)
  • 擦掉闪光灯<代码>esptool.py--端口擦除\u闪存
  • 然后我就可以写一个新的固件了。我使用了一个stock nodeMCU 0.9.5只是为了隔离变量,但我强烈怀疑任何固件在这一点上都可以工作

  • 不要在开发阶段使用init文件。将其命名为init_start.lua或类似名称,并使用dofile命令手动执行。一旦您的开发完成并且一切正常,您就可以重命名它并利用自动执行。我遵循了这些,但我编写了init.lua用于独立测试,现在我被锁定了:(nodemcu没有正确清除ram存在问题。这就是导致无限重新启动的原因。从2016年1月开始写这篇文章-上述问题仍然存在于nodemcu中,并且上述解决方案仍然有效。您在哪里找到这些地址(0x7e000和0x7c000)-是否有关于这些的更多文档?您可以在此处参考内存映射:地址可能会根据您的闪存大小而变化。
    sudo python esptool.py -p /dev/ttyUSB0 --baud 460800 write_flash --flash_size=8m 0 nodemcu_latest.bin