它表示代码量太大,IROM 区域存放不下了。
我们可以在 SDK_v0.9.5 (及之后)的软件版本中,尝试如下步骤,解决这个问题:
1. 使用默认设置,编译生成 eagle.flash.bin 和 eagle.irom0text.bin。
(1) 如果 size of eagle.flash.bin + size of eagle.irom0text.bin >= 236KBytes:
很抱歉,您的代码量太大了,只能换大些的 Flash。
(2) 如果 size of eagle.flash.bin + size of eagle.irom0text.bin < 236KBytes:
请继续步骤 2。
2. 在路径 SDK/ld 下修改文件“eagle.app.v6.new.512.app1.ld"。
irom0_0_seg: org = 0x40201010, len = 0x2B000
根据步骤 1 中编译的“eagle.irom0text.bin”大小,改写上述 len 的值。
示例:如果“eagle.irom0text.bin”大小为 179 KB,则可修改配置如下:
irom0_0_seg: org = 0x40201010, len = 0x2D000
3. 重新编译 user1.bin 选择 boot_v.1.2+。
补充说明:
代码中,
- 函数前未加 ICACHE_FLASH_ATTR 的,编译到 IRAM 中,最大 32 KB;
- 函数前加了 ICACHE_FLASH_ATTR 的,编译到 IROM 中;
因为 RAM 的空间有限,因此做了这两个部分的区分:
- IRAM 中的代码,会在上电初始就完整加载到 RAM 中;
- IROM 中的代码是用到的时候才从 Flash 加载到 cache 中执行。