Очень большое программное хранилище генерируется в Arduino

hamsafar_a85
Вторник 09 мая 2017 г. 11:41
Я составляю свой проект для UNO, и размер моей программы составляет около 16 КБ, но при составлении его для Maple Mini код слишком большой!!!
Sketch использует 85056 байтов (76%) пространства для хранения программ. Максимум - 110592 байта.
Глобальные переменные используют 6272 байта динамической памяти.

Как я могу сократить пространство программы?

Стивестронг
Вторник 09 мая 2017 г. 11:53 утра
Избегайте использования blabla my_variable = new some_fancy_class;

victor_pv
Вторник 09 мая 2017 12:33
Другой участник форума создал этот инструмент для анализа .Файл карты:
http: // danieleff.com/stm32/map_analizer/

Если вы не используете «новый» или не думаете, что это не учитывает всю разницу в пространстве, получите свой файл из папки сборки, загрузите его и поможет вам найти то, что занимает место. Если у вас есть сомнения во всем, что вы найдете там, отправьте сообщение, чтобы узнать, сможет ли кто -нибудь дать вам дополнительный совет.

AG123
Вторник 09 мая 2017 г., 19:09
Проверьте свои платформы.TXT на конкретном ядро ​​E.глин. F1 или F4 Эти флаги должны быть указаны на флагах компиляции GCC и G ++ -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -ffreestanding -fno-move-loop-invariants -fno-exceptions -fno-rtti -fno-use-cxa-atexit -fno-threadsafe-statics -nostdlib -Xlinker --gc-sections --specs=nano.specs

hamsafar_a85
Ср 10 мая 2017 г., 4:34
Стивестронг написал:Избегайте использования blabla my_variable = new some_fancy_class;

hamsafar_a85
Ср 10 мая 2017 г., 4:40
victor_pv написал:Другой участник форума создал этот инструмент для анализа .Файл карты:
http: // danieleff.com/stm32/map_analizer/

Если вы не используете «новый» или не думаете, что это не учитывает всю разницу в пространстве, получите свой файл из папки сборки, загрузите его и поможет вам найти то, что занимает место. Если у вас есть сомнения во всем, что вы найдете там, отправьте сообщение, чтобы узнать, сможет ли кто -нибудь дать вам дополнительный совет.

AG123
Ср 10 мая 2017 г., 6:39
Проверьте платформы.TXT, что эти компиляции указаны в командах компиляции GCC, G ++ -nostdlib -Xlinker --gc-sections -specs=nano.specs -fno-exceptions -fno-rtti -fno-use-cxa-atexit -fno-threadsafe-statics

Rogerclark
Ср 10 мая 2017 г. 10:14
Проблема с новым приведением к бинарному размеру гораздо больше, чем ожидалось, была частично исправлена ​​в прошлом году в этом коммите

https: // github.com/rogerclarkmelbourne/ ... 2A824D80B7

Добавлением новых.CPP

Однако, похоже, это не работает при любых обстоятельствах

Кто -то должен будет выяснить, почему функции в новом.CPP не вызывается в этом случае

hamsafar_a85
Сб 13 мая 2017 г., 7:30 утра
AG123 написал:Проверьте платформы.TXT, что эти компиляции указаны в командах компиляции GCC, G ++ -nostdlib -Xlinker --gc-sections -specs=nano.specs -fno-exceptions -fno-rtti -fno-use-cxa-atexit -fno-threadsafe-statics

Стивестронг
Сб 13 мая 2017 г., 7:32 утра
Можете ли вы показать нам свой код?

hamsafar_a85
Сб 13 мая 2017 г., 7:40
Rogerclark написал:Проблема с новым приведением к бинарному размеру гораздо больше, чем ожидалось, была частично исправлена ​​в прошлом году в этом коммите

https: // github.com/rogerclarkmelbourne/ ... 2A824D80B7

Добавлением новых.CPP

Однако, похоже, это не работает при любых обстоятельствах

Кто -то должен будет выяснить, почему функции в новом.CPP не вызывается в этом случае

Racemaniac
Сб 13 мая 2017 г., 7:51
Это действительно довольно нормальный базовый уровень :)
Все основные вещи занимают больше места, чем вы видите на Arduino, но у вас есть много места, чтобы продолжать работать с :)

hamsafar_a85
Сб 13 мая 2017 г., 7:59
Стивестронг написал:Можете ли вы показать нам свой код?

hamsafar_a85
Сб 13 мая 2017 г. 8:11
Реданьяк написал:Это действительно довольно нормальный базовый уровень :)
Все основные вещи занимают больше места, чем вы видите на Arduino, но у вас есть много места, чтобы продолжать работать с :)

Стивестронг
Сб 13 мая 2017 г. 10:04
Значения вспышки и оперативной памяти, которые вы получаете, сравнивая с UNO, являются нормальными.
Не беспокойтесь, какой -либо дальнейший добавленный код не увеличивает размер кода пропорционально.

Можете ли вы также поделиться файлом карты? Глядя на файл карты, вы можете определить, какие модули вызывает самый большой размер кода.
Кажется, что код, которым вы поделились, не все, что вы используете, отсутствуют библиотеки.

Эдогальдо
Сб 13 мая 2017 г. 10:45
hamsafar_a85 написал:С STM32F103C8 IC есть:
Sketch использует 12876 байтов (19%) пространства для хранения программ. Максимум составляет 65536 байтов.
Глобальные переменные используют 2816 байтов динамической памяти.

Пока этот код с ООН:
Sketch использует 928 байт (2%) пространства для хранения программ. Максимум составляет 32256 байтов.
Глобальные переменные используют 9 байтов (0%) динамической памяти, оставляя 2039 байтов для локальных переменных. Максимум - 2048 байт.

Стивестронг
Сб 13 мая 2017 г. 12:11
hamsafar_a85 написал:Я составляю свой проект для UNO, и размер моей программы составляет около 16 КБ, но при составлении его для Maple Mini код слишком большой!!!
Sketch использует 85056 байтов (76%) пространства для хранения программ. Максимум - 110592 байта.
Глобальные переменные используют 6272 байта динамической памяти.

Как я могу сократить пространство программы?

Рик Кимбалл
Сб 13 мая 2017 г. 12:24
Лучшим эталоном будет использование платы Arduino, которая сопоставимо с STM32F103. Наш размер кода выглядит довольно хорошо, когда вы сравниваете его с Arduino Dueed. Это ядро ​​использует ~ 22K для наброска мигания. Причитание также использует кору-м3, поэтому, по крайней мере, вы сравниваете яблоки с яблоками.
Sketch использует 22124 байт (4%) пространства для хранения программ. Максимум составляет 524288 байтов. Для усмешки я проверил на моем порту MSP430G25553 Arduino:
Sketch использует 808 байт (4%) пространства для хранения программ. Максимум - 16384 байта.
Глобальные переменные используют 18 байтов (3%) динамической памяти, оставляя 494 ​​байта для локальных переменных. Максимум составляет 512 байта.
Суть, размер кода зависит от архитектуры чипа, используемого компилятора, фактического кода основного ядра и от того, как вы кодируете свою программу.

Рик Кимбалл
Сб 13 мая 2017 г. 12:45
hamsafar_a85 написал:Стивестронг написал:Можете ли вы показать нам свой код?

AG123
Сб 13 мая 2017 г. 13:42
Среди различий UNO, вероятно, не поддержит много вещей, которые * просто там * на STM32, мы в основном считаем само собой разумеющимся »
эн.глин. На STM32 существует USB-сериал, а STM32F1-это нативное USB-устройство, UNO *Не делайте USB и не может делать USB *, STM32 также имеет еще много других ресурсов, таких как 2 порта SPI, UARTS, ADC, DMA, часы Это можно запрограммировать на лету, включать / выключить часы в отдельные периферийные шины, множественные назначения AFIO, состояния с низкой мощностью и т. Д. Поддержка для этого оборудования может неизбежно потребовать больше кодов для поддержки его, следовательно, несколько более крупный двоичный размер

Следовательно, я предполагаю, что когда компиляторы строят для Atmega328, то, что «нет», просто * пропущено *, поскольку у MCU не будет оборудования для их поддержки и приведет к ошибкам компиляции, если они построены в конце концов

Библиотека Fastleds казалась довольно большой, я бы подумал, я не слишком уверен, содержат ли она IFDEF, которые, возможно, пропустить разделы кода, которые не используются, в противном случае, когда библиотека составлена, все связанные объекты могут быть включены в бинарию Следовательно, способствуя бинарному раздуванию

Даниэфф
Сб 13 мая 2017 г. 14:59
hamsafar_a85 написал: С STM32F103C8 IC есть:
Sketch использует 12876 байтов (19%) пространства для хранения программ. Максимум составляет 65536 байтов.
Глобальные переменные используют 2816 байтов динамической памяти.

hamsafar_a85
Солнце 14 мая 2017 г. 3:56 утра
Стивестронг написал:hamsafar_a85 написал:Я составляю свой проект для UNO, и размер моей программы составляет около 16 КБ, но при составлении его для Maple Mini код слишком большой!!!
Sketch использует 85056 байтов (76%) пространства для хранения программ. Максимум - 110592 байта.
Глобальные переменные используют 6272 байта динамической памяти.

Как я могу сократить пространство программы?

hamsafar_a85
Солнце 14 мая 2017 г., 3:58
Рик Кимбалл написал:hamsafar_a85 написал:Стивестронг написал:Можете ли вы показать нам свой код?

hamsafar_a85
Солнце 14 мая 2017 г. 4:10 утра
AG123 написал:Среди различий UNO, вероятно, не поддержит много вещей, которые * просто там * на STM32, мы в основном считаем само собой разумеющимся »
эн.глин. На STM32 существует USB-сериал, а STM32F1-это нативное USB-устройство, UNO *Не делайте USB и не может делать USB *, STM32 также имеет еще много других ресурсов, таких как 2 порта SPI, UARTS, ADC, DMA, часы Это можно запрограммировать на лету, включать / выключить часы в отдельные периферийные шины, множественные назначения AFIO, состояния с низкой мощностью и т. Д. Поддержка для этого оборудования может неизбежно потребовать больше кодов для поддержки его, следовательно, несколько более крупный двоичный размер

hamsafar_a85
Вторник 16 мая 2017 г. 7:12
Ух ты
Через некоторое время и попробую и ошибку я добавляю -fno-threadsafe-statics