Сколько флэш-памяти esp8266 можно отобразить? - PullRequest
2 голосов
/ 23 июня 2019

Я пытался связать программу с 200 Кбайт постоянных данных.

Я использовал атрибут __attribute__((section(".irom.text"))) в попытке поместить его во флэш-память, так как считаю, что ESP8266 имеет 4 МБ доступной флэш-памяти.

Увы, компоновщик выдает ошибку:

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

Используемый скрипт компоновщика - это то, что я получил от платформы ввода-вывода:

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 Кбайт), может быть недостаточно для моего кода, константного массива и SDK.

Так где же обещанные 4Mbytes? Можно ли отобразить больше FLASH?

1 Ответ

0 голосов
/ 24 июня 2019

Я думаю, что я понял это.

Кажется, что системные параметры для 4-мегабайтного модуля должны быть расположены на 0x3fb000.

Таким образом, можно увеличить irom размер сегмента до 0x3fb000 - 0x20000 = 0x3DB000 байтов.

Вот пример, где я добавил 0x1000 свободных байтов после irom конца (на случай, если я пропустил что-то, чего я не понимаю):

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

Также необходимо указать инструменту esp поместить каждый раздел в нужное место во флэш-памяти (обратите внимание, куда идет 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
...