Memory esp8266闪存中有多少可以实际映射?

Memory esp8266闪存中有多少可以实际映射?,memory,embedded,esp8266,Memory,Embedded,Esp8266,我试图链接一个有200Kbyte常量数据的程序 我使用了\uu属性(section(“.irom.text”))属性试图将其放入闪存中,因为我相信ESP8266有4MB的可用闪存 唉,链接器给出了一个错误: bin/firmware.elf section `.irom0.text' will not fit in region `irom0_0_seg' 使用的链接器脚本是我从平台IO获得的,它是: MEMORY { dport0_0_seg :

我试图链接一个有200Kbyte常量数据的程序

我使用了
\uu属性(section(“.irom.text”))
属性试图将其放入闪存中,因为我相信ESP8266有4MB的可用闪存

唉,链接器给出了一个错误:

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
(376kbytes),对于我的代码、常量数组和SDK来说可能不够


那么承诺的4MB在哪里?有可能绘制更多的闪光灯吗?

我想我已经找到了答案

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

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

下面是一个示例,我在
irom
end之后添加了0x1000备用字节(以防我遗漏了我不理解的内容):

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


SoC本身没有片内闪存。是什么让你认为它有4Mb?闪存是由板或模块上的外部芯片提供的-您拥有的确切部件或板是什么?可用的闪存取决于您的板-您可以知道有多少。可能您有一个4Mbit(512Kb)内存?@Clifford esp8266模块通常带有映射到其内存空间的外部闪存。我的设备是nodemcu v3,我很确定它有4个字节。我将尝试使用链接器脚本并增加irom大小。也许platformio在那里出错了。
irom0_0_seg : org = 0x40220000, len = 0x3DA000 /* 4MB FLASH: irom begin untill system params start is 0x3DB000  */
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