Перейти к содержанию
    

Анализ программы на объем требуемой памяти

Знаете ли вы какой-то способ найти, вывести и отсортировать по размеру все массивы которые объявлены в коде? Нашел одну утилиту для анализа map файла MapViewer.exe. Вроде нормально, но может я чего-то не знаю про стандартные средства разработки? Использую mcuxpresso и sw4stm32. Компилятор gcc.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 minutes ago, EdgeAligned said:

Инструментарий самой IDE?

Я так понимаю, это уже в режиме отладки видно. А мне ide говорит что ОЗУ не хватает при компиляции. В map файле все видно, но в нем надо искать то что надо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 minutes ago, EdgeAligned said:

Нет, это как раз в режиме компиляции.

Что-то не находится такая панелька. Обе дебажные, а остальное вообще непойми зачем, пустые при открытии. У вас одна из mcuxpresso или sw4stm32 ?

memory.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 minutes ago, EdgeAligned said:

Окно должно называться Build Analyzer. Нет, у меня другое ПО. CubeIDE, он же бывший ранее Atollic

Не. И такого окошка нет. Ну ладно. Хорошо хоть сторонняя утилитка от энтузиаста работает более менее нормально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, kochevkv сказал:

Знаете ли вы какой-то способ найти, вывести и отсортировать по размеру все массивы которые объявлены в коде? Нашел одну утилиту для анализа map файла MapViewer.exe. Вроде нормально, но может я чего-то не знаю про стандартные средства разработки? Использую mcuxpresso и sw4stm32. Компилятор gcc.

.map-файл - это обычно просто текстовый файл. Который можно открыть и просмотреть просто глазами. Зачем для этого какая-то "утилита"??

"Сортировать по размеру" - если компоновщик не делает этого сам, то возможно у него есть ключ, включающий это. Ну или даже простой командой SORT, ведущей свою родословную ещё от MS-DOS, текстовые файлы вполне сортируются. Да честно говоря - не вижу большой необходимости в сортировке. У вас же не тысячи массивов в коде? А десяток-два-три - глазами вполне видно без всяких сортировок.

5 часов назад, kochevkv сказал:

А мне ide говорит что ОЗУ не хватает при компиляции.

ОЗУ не может не хватать при компиляции. Может только при компоновке. И .map-файл создаёт не компилятор, а компоновщик.

4 часа назад, kochevkv сказал:

Не. И такого окошка нет. Ну ладно. Хорошо хоть сторонняя утилитка от энтузиаста работает более менее нормально.

Запускаете TotalCommander (или что-то подобное), находите .map-файл, нажимаете на нём F3 и... наслаждаетесь видом .map-файла.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

52 minutes ago, jcxz said:

.map-файл - это обычно просто текстовый файл. Который можно открыть и просмотреть просто глазами. Зачем для этого какая-то "утилита"??

Большой текстовый файл где указаны все массивы и переменные. Хорошо бы было если б он был сделан как файл с разделителями, но там не совсем так. Если знаете ключ - то я буду рад тоже его узнать)

 

54 minutes ago, jcxz said:

У вас же не тысячи массивов в коде? А десяток-два-три - глазами вполне видно без всяких сортировок

Там все в куче - и переменные, и массивы. Десятка 2-3 это скромно очень.

 

57 minutes ago, jcxz said:

Запускаете TotalCommander (или что-то подобное), находите .map-файл, нажимаете на нём F3 и... наслаждаетесь видом .map-файла.

Открыл, ужаснулся и нашел утилиту, которой вполне удовлетворен, но думал может есть что-то более распространенное и общепринятое, а не утилита с гитхаба какого-то энтузиаста.

 

1 hour ago, jcxz said:

ОЗУ не может не хватать при компиляции. Может только при компоновке. И .map-файл создаёт не компилятор, а компоновщик.

Согласен) надо было мне написать "при сборке", тогда б не так неграмотно было бы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, kochevkv сказал:

Там все в куче - и переменные, и массивы. Десятка 2-3 это скромно очень.

ну не знаю..... Открыл участок IAR-овского .map-а:

...
g26_extrusion_multiplier                                                              
                        0x200010cc     0x4  Data  Lc  G26_Mesh_Validation_Tool.o [1]  
g26_hotend_temp         0x20001080     0x2  Data  Lc  G26_Mesh_Validation_Tool.o [1]  
g26_layer_height        0x200010d4     0x4  Data  Lc  G26_Mesh_Validation_Tool.o [1]  
g26_prime_flag          0x2000107d     0x1  Data  Lc  G26_Mesh_Validation_Tool.o [1]  
g26_prime_length        0x200010d8     0x4  Data  Lc  G26_Mesh_Validation_Tool.o [1]  
g26_retracted           0x2000107c     0x1  Data  Lc  G26_Mesh_Validation_Tool.o [1]  
g26_retraction_multiplier                                                             
                        0x200010d0     0x4  Data  Lc  G26_Mesh_Validation_Tool.o [1]  
g26_x_pos               0x200010dc     0x4  Data  Lc  G26_Mesh_Validation_Tool.o [1]  
g26_y_pos               0x200010e0     0x4  Data  Lc  G26_Mesh_Validation_Tool.o [1]  
gArrayGpioPinIn         0x0800b498    0x74  Data  Gb  fastio.o [1]                    
gArrayGpioPinOut        0x0800b50c    0x74  Data  Gb  fastio.o [1]                    
gCfgItems               0x200015e8   0x1bc  Data  Gb  mks_cfg.o [1]                   
gCurFileState           0x20008e98   0x234  Data  Gb  mks_cfg.o [1]                   
gTouchEvent             0x2000b484     0xc  Data  Lc  GUI_X_Touch.o [4]               
gcode_G26()             0x080371e1   0xbbc  Code  Gb  G26_Mesh_Validation_Tool.o [1]  
gcode_G28(bool)         0x080366b1   0x340  Code  Gb  marlin_main.o [1]               
gcode_G29()             0x0803830d   0xe64  Code  Gb  marlin_main.o [1]               
gcode_G29()::string     0x0801a840    0x14  Data  Gb  marlin_main.o [1]               
...

вроде понятно всё...

2-й столбец - адрес. 0x080xxxxx - flash, 0x2000xxxx - ОЗУ.

3-й столбец - размер. Где размер большой - массивы, небольшой - одиночные переменные. Ищем самые большие куски и оптимизируем их.

 

Если ваш компоновщик сортирует записи по адресам, то у вас будут flash-объекты отдельно от RAM-объектов. Ещё удобнее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...