ESP32同时使用蓝牙以太网导致程序过大无法启动问题

esp32如果使同时使用了蓝牙模块和以太网的话很有可能会导致程序过大(超过1M),系统无法启动的情况。这里提供一种通过修改分区表扩大程序储存空间的方法来避免这一问题。这一解决方法同样只用于因为其他问题导致的程序过大的情况。

ESP32同时使用蓝牙以太网导致程序过大无法启动问题

分区表

分区表简单的来说就是对Flash进行划分,不同区域存放不同的东西。

解决方法

造成这一现象的原因是程序超出了flash中预先分配的程序存储空间(1M),通过修改分区表可以解决。步骤如下:

1.建立自己的分区表.CSV文件

2.make menuconfig 菜单中 Partition Table-->Partition Table选择Custom partition table CSV,Custom partition CSV file中指定CSV文件地址。

这里提供一个我的分区表:

# Name, Type, SubType, Offset, Size, Flags
# Note: if you change the phy_init or app partition offset, make sure to change the offset in Kconfig.projbuild
nvs,       data,  nvs,     ,     0x4000,
otadata,   data,  ota,     ,     0x2000,
phy_init,  data,  phy,     ,     0x1000,
factory,   app,   factory, ,     0x140000,

需要注意的是:

1、分配分区表的时候空间一定要是4k的整数倍也就是:存储空间%4096=0。这是因为flash的一个区块是4k。

2、ota分区(ota_0,ota_1)的空间最好和原厂程序(factory)相同

3、分区表名字必须与Custom partition CSV file中指定CSV文件名相同,且必须放在工程目录下,否则无法编译通过。

参考:

https://www.cnblogs.com/zornlink/p/11408925.html