我有一个奇怪的问题。我有已经使用了很长时间的工作代码,并进行了一些重构以在 ESP32 上使用 ArduinoJson 库。
我现在的问题是,通过(有时)添加任何代码,ESP32 似乎一启动就会崩溃:
16:06:18.253 -> rst:0x3 (SW_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
16:06:18.253 -> configsip: 0, SPIWP:0xee
16:06:18.253 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
16:06:18.253 -> mode:DIO, clock div:1
16:06:18.253 -> load:0x3fff0030,len:1184
16:06:18.253 -> load:0x40078000,len:13260
16:06:18.253 -> load:0x40080400,len:3028
16:06:18.253 -> entry 0x400805e4
16:06:18.681 -> ets Jul 29 2019 12:21:46
添加的代码可以是 Serial.print("TEST");
我已处于记忆的尽头,但已经在那里很长时间了,甚至一度更接近了。
Sketch uses 1305157 bytes (99%) of program storage space. Maximum is 1310720 bytes.
Global variables use 56812 bytes (17%) of dynamic memory, leaving 270868 bytes for local variables. Maximum is 327680 bytes.
可能是什么原因?我不知道,但它现在使项目陷入停顿,而且它似乎不是代码,因为似乎没有代码被执行。
我的 ESP32 DevBoard (Arduino IDE 1.8.19) 上也有完全相同的问题…
Sketch 使用 1306737 字节(99%)的程序存储空间。最大值为 1310720 字节。全局变量使用 55672 字节 (16%) 的动态空间 内存,留下 272008 字节用于局部变量。最大值为 327680 字节。
这导致我的 ESP32 在启动时反复崩溃,并重复出现消息:
rst:0x3(SW_RESET),启动:0x13(SPI_FAST_FLASH_BOOT)configsip:0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 模式:DIO,时钟分频:1 负载:0x3fff0030,len:1344 负载:0x40078000,len:13836 负载:0x40080400,len:3608 条目 0x400805f0
修复方法很简单,将 Arduino 的“分区方案”设置从“1.2MB App”更改为“1.9MB App”(即不使用“程序存储空间”的前 1%),因此使用 IDE 代替报告:
Sketch 使用 1306737 字节(66%)的程序存储空间。最大值为 1966080 字节。全局变量使用 55672 字节 (16%) 的动态空间 内存,留下 272008 字节用于局部变量。最大值为 327680 字节。
我怀疑这可能是因为“程序存储空间”的最顶部(大约顶部1%)有一些内存不应该被覆盖,如果被覆盖会导致启动时不断重复的ESP崩溃。