Какая часть флэш-памяти esp8266 может быть сопоставлена?

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

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

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

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"

Действительно, длины секции irom0x5C000 (376 Кбайт) может быть недостаточно для моего кода, массива констант и SDK.

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

Сама SoC не имеет встроенной флэш-памяти. С чего вы взяли, что у него 4 Мб? Флэш-память обеспечивается внешним чипом на плате или модуле — какая именно деталь или плата у вас есть?

Clifford 23.06.2019 01:25

Доступная вспышка зависит от вашей платы, но вы можете узнать, сколько ее там.

Dave Newton 23.06.2019 01:27

Возможно у вас 4Мбит (512Кб) памяти?

Clifford 23.06.2019 12:42

Модули @Clifford esp8266 обычно поставляются с внешней флэш-памятью, которая отображается в ее пространстве памяти. Мое устройство — nodemcu v3, и я уверен, что оно имеет 4 МБ. Попробую поиграться со скриптом линкера и увеличить размер рома. Возможно, в платформере была ошибка.

Artium 23.06.2019 17:24

@Artium: Я знаю, это то, что я сказал. Я хочу сказать, что сумма зависит от конкретной платы или детали. Вы должны добавить эту информацию к вопросу, а не отвечать в комментариях.

Clifford 23.06.2019 18:58

Остальное можно использовать для SPIFFS. Карты памяти: esp8266.com/wiki/doku.php?id=esp8266_memory_map

Marcel Stör 23.06.2019 21:24
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
7
212
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Кажется, что системные параметры для 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

Другие вопросы по теме