Уменьшение потребления оперативной памяти

Кастотиу
Вторник 05 декабря 2017 г. 13:04
Мой текущий проект находится на синей таблетке, и я еду на RGBMatrix 128x32 пикселей с двойным буфером, а также получаю страстное содержание видео буфера из SPI в буфере DMA, в котором также используется двойной буфер, так как мне нужно сделать обработку из Буфер DMA перед отправкой в ​​видеобаффер.

Итак, как минимум, у меня есть 14344 байта, используемые до начала кода, синяя таблетки составляет 20 тыс., Поэтому я играю в пределах и мало остался, однако я заметил, чем пустая программа может занять от 2 до 3 КБ

Что я могу сделать, чтобы уменьшить использование оперативной памяти? Я заметил, что если я собираюсь загрузить с сериалом, программа значительно меньше 2824 для Stlink vs 1968 для серий.

Я вижу, что меньшая программа-это когда я компилируюсь для загрузки с сериалом, а затем выбираю оптимизацию быстрой (-O3) с LTO. «14256 байт (69%)», что странно, поскольку начальный отпечаток ноги памяти не должен составлять менее 14344, сериал намного медленнее, чем Stlink

Почему сериал меньше, и есть ли способ уменьшить первоначальный следов ОЗУ для пустого наброска?

generic_f407v.build.extra_flags= -DLED_BUILTIN=PA6

Стивестронг
Вторник 05 декабря 2017 г. 13:41
Вы можете сэкономить немного оперативной памяти, если избежать серийного (USB).
Так что попробуйте ни сериала вообще, либо Serial1/2.

Кастотиу
Вторник 05 декабря 2017 г. 13:53
Как отключить USB?

Стивестронг
Вторник 05 декабря 2017 г. 13:58
Удалить с досок.txt для соответствующей платы флаг компилятора: "-deserial_usb".

Mrburnette
Вторник 05 декабря 2017 г. 15:44
@castortiu:

Похоже, вы рисуете себя в угол, выбирая синюю таблетку. Как уже говорилось, буферы потребляют подавляющее большинство SRAM, поэтому я воспринимаю это, что вы используете неправильный UC.

Луча

Zoomx
Вторник 05 декабря 2017 г. 15:52
Может быть, лучше проверить полный пустой проект! arm-none-eabi-nm --print-size --size-sort --radix=d yourfile.elf

victor_pv
Вторник 05 декабря 2017 г. 16:40
Я с Рэем. Есть способы сэкономить несколько сотен байт здесь и там, удалив части ядра для периферийных устройств, которые вы не используете. Но это все еще 20 -килограммовый MCU. Почему бы не использовать RCT6 MCU с 48 КБ?

Кастотиу
Вторник 05 декабря 2017 г., 17:08
STM32 работает как рабов. Я еще не достиг предела ОЗУ, но я близок и ищу альтернативы перед прыжком в разные MCU, однако я тоже открыт для переключения.

Я довольно новый.... Что такое RTC6?
Кроме того, почему при составке для загрузки с помощью Stlink занимает более чем на 1 тысяч больше, чем при составлении для загрузки с серийным?

У меня есть приказ STM32F407Vet6 в пути, однако кажется огромным для возможностей для того, что мне нужно, я пытаюсь достичь возможностей на устройстве, прежде чем бросить больше аппаратного обеспечения в проблему..

Rogerclark
Вторник 05 декабря 2017 г. 8:28 вечера
Если вы измените ядро, вы можете избавиться от серийного USB, но вы также должны избавиться от всех аппаратных серийных буферов.

Но в конечном итоге это будет освободить менее 1к

Arduino разработан как учебный инструмент и не оптимизирован для скорости, размера или использования оперативной памяти, поэтому, если вы хотите подтолкнуть MCU в его пределы, вам следует полностью отказаться, используя ядро ​​Arduino, и использовать что -то вроде Libopencm3 или сделать Что делает код загрузчика, и напрямую доступ к аппаратным регистрам, без фреймворта вообще

Mrburnette
Вторник 05 декабря 2017 г. 11:48
[Кастотиу - Вторник 05 декабря 2017 г. 17:08] - <...>
У меня есть заказ STM32F407VET6 в пути, однако кажется огромным для возможностей для того, что мне нужно, Я пытаюсь достичь возможностей на устройстве Прежде чем бросить больше оборудования в проблему..
Как старое эмпирическое правило, программист должен начать искать, должен был быть более эффективным при 80% использования оперативной памяти и должен Rearchitect или выбрать более способный H/W при 90%.

Лично у меня есть никогда Увиденная повторная архитектура в дикой природе, потому что в коммерческой разработке босс просто уводит любого программиста, который предполагает, что начинается с новой конструкции после того, как была потрачена значительная часть фазы кодирования. Всегда «проще» объяснить необходимость новых аппаратных ресурсов.

Никто здесь не заботится, если вы бежите в 99.9%, но я думаю, что это глупо создавать программную систему, которая не может адаптироваться, по крайней мере, к небольшому количеству усовершенствований или исправлений.

Луча

Rogerclark
Ср. 06 декабря 2017 г. 12:08
Большой урок, который я усвоил (за свой счет недавно) был.

Никогда не предназначен для прототипа.

Если есть 2 или более, SIN -совместимые и совместимые с программным обеспечением, версии одного и того же устройства, получите лучшие устройства Spec E E.глин. Больше оперативной памяти или лучшей скорости и т. Д. Для прототипа,
В противном случае вы можете получить партию, если только доски или те, где вы тратите часы, пытаясь оптимизировать код для работы.

Если вы превышаете спектр, это будет стоить 50% больше на 10 прототипах, но, по крайней мере, они все будут работать, и вы можете оптимизировать позже, чтобы увидеть, сможете ли вы уйти с более дешевыми устройствами в конечном продукте.