• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP8266 анализ потребляемой памяти

Junkie

Member
После компиляции программы мы видим строку:
Глобальные переменные используют 50296 байт (61%) динамической памяти, оставляя 31624 байт для локальных переменных. Максимум: 81920 байт.

Значит компилятор как то считает все переменные и складывает объем.
Можно ли как то получить лог этого подсчета например имя файла, номер строки, имя переменной и сколько съела байт,
чтобы проанализировать данные и оптимизировать потребление
 

Junkie

Member
такс, кое что накопал:
в папке компиляции ардуины C:\Users\User\AppData\Local\Temp\arduino_build_189098
находим .map файл, его открыл программой http://www.sikorskiy.net/prj/amap/ и там выходят таблицы с огромными цифрами, как понять что именно относится к ram?
в этот раз расход был Глобальные переменные используют 50372 байт (61%) динамической памяти,
но тут нет такого числа наверное это сумма каких то разделов
 

Вложения

Junkie

Member
что вычитал в логе ардуины, там прям двумя строчками выше общего размера памяти написано
Код:
Executable segment sizes:
IROM   : 228400          - code in flash         (default or ICACHE_FLASH_ATTR)
IRAM   : 26352   / 32768 - code in IRAM          (ICACHE_RAM_ATTR, ISRs...)
DATA   : 1248  )         - initialized variables (global, static) in RAM/HEAP
RODATA : 688   ) / 81920 - constants             (global, static) in RAM/HEAP
BSS    : 24840 )         - zeroed variables      (global, static) in RAM/HEAP
Думаю на свой вопрос я ответил. основная секция которую надо рыть это bss, она сама жирная, остальное по желанию
возможно мои потуги в этом вопросе кому-нибудь будут полезны
 

Ildarmustafin86

Active member
Я тоже этой темой занимаюсь, только на platformio. Там есть Project Inspection, она выводит более подробную инфу, пока в ней ковыряюсь
 

Junkie

Member
да. в моей программке тоже есть вкладка с подробной таблицей на что ушел каждый байт
 

enjoynering

Well-known member
нашел спасибо. вот же спрятали. до rc можно не обновлять, в stable 3.3.4 уже есть. но вот беда - вылезли ошибки esp8266 Core не относящиеся к проекту и дальше не идет.
 

Вложения

Junkie

Member
еще интересно сильно ли жрут память подобные фокусы, и все константы в функциях по типу "</td>" с самого начала загружаются в RAM или только при вызове функции
 

Вложения

enjoynering

Well-known member
да жрут. а так как вы складываете строки/String у вас жЁр еще больше.

чтоб строки хранились не в памяти, а во флеш надо использовать макрос F("</td>")

чтоб жер при сложении строк был меньше надо складывать так:

Код:
String foo;

foo = "hello";

foo +="world"

return foo;
подробнее почему так в гугл.
 

Atom

Member
Сверху Снизу