• Система автоматизации с открытым исходным кодом на базе 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
Сверху Снизу