esp8266 flash实际可以映射多少个?

时间:2019-06-22 22:48:10

标签: memory embedded esp8266

我试图链接一个具有200 KB恒定数据的程序。

我使用__attribute__((section(".irom.text")))属性试图将其放入Flash中,因为我相信ESP8266具有4MB的可用闪存。

A,链接器给出一个错误:

bin/firmware.elf section `.irom0.text' will not fit in region `irom0_0_seg'

所使用的链接程序脚本是我从平台IO获得的,即:

MEMORY
{
  dport0_0_seg :                        org = 0x3FF00000, len = 0x10
  dram0_0_seg :                         org = 0x3FFE8000, len = 0x18000
  iram1_0_seg :                         org = 0x40100000, len = 0x8000
  irom0_0_seg :                         org = 0x40220000, len = 0x5C000
}

INCLUDE "../ld/eagle.app.v6.common.ld"

实际上,irom段的长度为0x5C000(376 KB)可能不足以容纳我的代码,常量数组和SDK。

那么,承诺的4Mbytes在哪里?是否可以映射更多的FLASH?

1 个答案:

答案 0 :(得分:0)

我认为我已经弄清楚了。

似乎4MB模块的系统参数应该位于0x3fb000

因此,可以将irom段的大小增加到0x3fb000 - 0x20000 = 0x3DB000个字节。

下面是一个示例,其中我在irom结尾之后添加了0x1000备用字节(以防万一我错过了我不理解的内容):

irom0_0_seg : org = 0x40220000, len = 0x3DA000 /* 4MB FLASH: irom begin untill system params start is 0x3DB000  */

还需要告诉esp工具将每个部分放在Flash中的正确位置(注意esp_init_data_default.bin的位置):

esptool -cd nodemcu -cb 115200 -cp "/dev/ttyUSB0" -ca 0x00000 -cf path/to/eagle.flash.bin -ca 0x20000 -cf path/to/eagle.irom0text.bin -ca 0x3fc000 -cf path/to/framework-esp8266-rtos-sdk/bin/esp_init_data_default.bin -ca 0x3fe000 -cf path/to/framework-esp8266-rtos-sdk/bin/blank.bin