kochevkv 1 15 июля Опубликовано 15 июля · Жалоба Знаете ли вы какой-то способ найти, вывести и отсортировать по размеру все массивы которые объявлены в коде? Нашел одну утилиту для анализа map файла MapViewer.exe. Вроде нормально, но может я чего-то не знаю про стандартные средства разработки? Использую mcuxpresso и sw4stm32. Компилятор gcc. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 79 15 июля Опубликовано 15 июля · Жалоба Инструментарий самой IDE? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kochevkv 1 15 июля Опубликовано 15 июля · Жалоба 19 minutes ago, EdgeAligned said: Инструментарий самой IDE? Я так понимаю, это уже в режиме отладки видно. А мне ide говорит что ОЗУ не хватает при компиляции. В map файле все видно, но в нем надо искать то что надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 79 15 июля Опубликовано 15 июля · Жалоба Нет, это как раз в режиме компиляции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kochevkv 1 15 июля Опубликовано 15 июля · Жалоба 17 minutes ago, EdgeAligned said: Нет, это как раз в режиме компиляции. Что-то не находится такая панелька. Обе дебажные, а остальное вообще непойми зачем, пустые при открытии. У вас одна из mcuxpresso или sw4stm32 ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 79 15 июля Опубликовано 15 июля · Жалоба Окно должно называться Build Analyzer. Нет, у меня другое ПО. CubeIDE, он же бывший ранее Atollic Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kochevkv 1 15 июля Опубликовано 15 июля · Жалоба 6 minutes ago, EdgeAligned said: Окно должно называться Build Analyzer. Нет, у меня другое ПО. CubeIDE, он же бывший ранее Atollic Не. И такого окошка нет. Ну ладно. Хорошо хоть сторонняя утилитка от энтузиаста работает более менее нормально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 224 15 июля Опубликовано 15 июля · Жалоба 6 часов назад, kochevkv сказал: Знаете ли вы какой-то способ найти, вывести и отсортировать по размеру все массивы которые объявлены в коде? Нашел одну утилиту для анализа map файла MapViewer.exe. Вроде нормально, но может я чего-то не знаю про стандартные средства разработки? Использую mcuxpresso и sw4stm32. Компилятор gcc. .map-файл - это обычно просто текстовый файл. Который можно открыть и просмотреть просто глазами. Зачем для этого какая-то "утилита"?? "Сортировать по размеру" - если компоновщик не делает этого сам, то возможно у него есть ключ, включающий это. Ну или даже простой командой SORT, ведущей свою родословную ещё от MS-DOS, текстовые файлы вполне сортируются. Да честно говоря - не вижу большой необходимости в сортировке. У вас же не тысячи массивов в коде? А десяток-два-три - глазами вполне видно без всяких сортировок. 5 часов назад, kochevkv сказал: А мне ide говорит что ОЗУ не хватает при компиляции. ОЗУ не может не хватать при компиляции. Может только при компоновке. И .map-файл создаёт не компилятор, а компоновщик. 4 часа назад, kochevkv сказал: Не. И такого окошка нет. Ну ладно. Хорошо хоть сторонняя утилитка от энтузиаста работает более менее нормально. Запускаете TotalCommander (или что-то подобное), находите .map-файл, нажимаете на нём F3 и... наслаждаетесь видом .map-файла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kochevkv 1 15 июля Опубликовано 15 июля · Жалоба 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-файл создаёт не компилятор, а компоновщик. Согласен) надо было мне написать "при сборке", тогда б не так неграмотно было бы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 224 16 июля Опубликовано 16 июля · Жалоба 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-объектов. Ещё удобнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться