Не хватает памяти, какие есть подходы?
- Войдите на сайт для отправки комментариев
Пнд, 11/01/2021 - 00:35
Столкнулся с нехваткой оперативной памяти, сейчас на макетке NANO. На сколько я понимаю банально мало памяти для динамической кучи.
в наличие есть NANO, UNO и MEGA, конечно можно перевести на последнюю, но может есть какие альтернативы?
Типа короткие имена переменных и функций,
строки на долгосрочную флеш
Отказ от объектов в пользу спагети кода?
Или еще чего? Кто подскажет какие методы вообще эффективны для сокращения размеров как программы так и занимаемой ей оперативки?
Сейчас у меня больше всего занимает библиотека SD
Столкнулся с нехваткой оперативной памяти, сейчас на макетке NANO. На сколько я понимаю банально мало памяти для динамической кучи.
в наличие есть NANO, UNO и MEGA, конечно можно перевести на последнюю, но может есть какие альтернативы?
СТМ32
абсолютно не влияет
это полезно
почти не влияет
Сейчас у меня больше всего занимает библиотека SD
если в проекте еще и дисплей - выбор Нано изначально был ошибкой
Посмотри в сторону progmem мне когда то помогло.
Я тут как-то гнал на недостатки советского образования, мол, сперва много теории без объяснения зачем это, потом практика. Я ошибался. Снижение порога входа, когда сперва не нужно много теории, а берём хуяк-хуяк и в продакшен и приводит к этому:
строки на долгосрочную флеш
Отказ от объектов в пользу спагети кода?
Все три варианта от неофита предназначены исключительно для человекочитаемости, в коде выигрыш будет ровно 0. Для того и нужно много теории перед, но с ассемблером этого слона не продашь.
Столкнулся с нехваткой оперативной памяти
А как это проявилось? Как Вы узнали, что не хватает памяти?
Рекомендаций по экономии памяти можно дать много, но беда в том, что почти все они применимы в каких-то сугубо специфических случаях.
Один их наиболее распространенных советов - полный отказ от строк-объектов (String).
Ну а вообще, нехватка памяти - результат ошибок. Либо в программировании, либо в выборе алгоритма, либо в выборе контроллера. Для того, чтобы памяти всегда хватало, Вы сами должны хорошо представлять, куда она расходуется и сколько ее нужно для конкретной задачи.
В любом случае без скетча поставить диагноз крайне затруднительно.
Да у него в программе работа с SD картой, там только буфер 512 байт поедает без соли. Я SD только к Меге подключаю. :)
А как это проявилось? Как Вы узнали, что не хватает памяти?
Да все банально, при 2х элементах в массиве все работает, при 3х программа зависает в конце первого цикла.
От String я отказался ранее, в аналогичной ситуации немного помогло, но все равно SD буквально сжирает ресурсы, у меня в проекте - часы реального времени, sd карта, экран 4х20, шина One Wire с датчиками, еще планировал wifi модуль, но теперь понимаю что точно не взлетит...
сейчас отключил модуль SD и на 3х элементах массива все работает... (элемент массива это данные с датчика температуры)
СТМ32
почитал, конечно вещь интересная но наверно я лучше уйду на более дорогую мегу
Все три варианта от неофита предназначены исключительно для человекочитаемости, в коде выигрыш будет ровно 0. Для того и нужно много теории перед, но с ассемблером этого слона не продашь.
я не просто так это писал, я не знаю как именно компилится программа, в нормальных языках есть директивы компилятора, здесь по существу только условные операторы для нарезки кода. Ни модели передачи параметров, ни формат генерации (будь это байт код или машинные коды), ни размеры стека, кучи, не понятно как именно осуществляется адресация по таблицам или компилятор генерит адреса безусловно, абсолютная или относительная адресация. Именно от этого зависит например влияние имен переменных на использование памяти. Да банально даже в ДОС была разница как компилить в EXE или в COM, и разница существенная.
Неужели Вы думает, что кто-то (кроме редких фанатов) будет влезать в физическую реализацию на платке которая стоит 2$ ??? Я например ожидаю, что если работать так как надо не будет - просто выкину и уйду в более дорогой сегмент где например есть полноценный питон или аналогичное, с нормальной отладкой и прочими плюшками.
Вот реально странно. На микро + SD + 24 далласа температурный логер работает влет. ТС, код где ?
перевел на мегу - все работает
Вот реально странно. На микро + SD + 24 далласа температурный логер работает влет. ТС, код где ?
ты требуешь невозможного )))
А как это проявилось? Как Вы узнали, что не хватает памяти?
Да все банально, при 2х элементах в массиве все работает, при 3х программа зависает в конце первого цикла.
А как-то оптимизировать размер элемента или не дублировать повторяющиеся параметры в разных элементах не пробовали?
СТМ32
почитал, конечно вещь интересная но наверно я лучше уйду на более дорогую мегу
я не просто так это писал, я не знаю как именно компилится программа, в нормальных языках есть директивы компилятора, здесь по существу только условные операторы для нарезки кода.
Можно подумать в С++ нет.
А в stm32 можно еще и прямо из среды опции командной строки выбрать. Так что я не понимаю, чем они Вам не понравились.
Ни модели передачи параметров, ни формат генерации (будь это байт код или машинные коды),
Для МК это неактуально. Совсем.
ни размеры стека, кучи,
Для однозадачной среды - неактуально: используется ВСЯ память, где стек и куча растут навстречу друг другу.
Да банально даже в ДОС была разница как компилить в EXE или в COM, и разница существенная.
Это проблемы исключительно DOS (т.е. его совместимости с CP/M-80), а также 8086 с его сегментированной памятью.
Неужели Вы думает, что кто-то (кроме редких фанатов) будет влезать в физическую реализацию на платке которая стоит 2$ ??? Я например ожидаю, что если работать так как надо не будет - просто выкину и уйду в более дорогой сегмент где например есть полноценный питон или аналогичное, с нормальной отладкой и прочими плюшками.
Тут есть несколько аспектов, в частности:
- если тираж составляет, скажем, миллион штук, разница между $2 и $3 оказывается уже вполне заметной,
- фанаты встречаются гораздо чаще, чем Вы думаете.
А вот называть интерпретируемый язык, большая часть "вкусностей" которого не может быть использована ввиду ограниченности ресурсов МК полноценным...
Вообще-то ничего удивительного, что программисты, привыкшие к тому, что интерпретатор думает за них, как правило, не могут ни понять, ни принять специфику МК.
Неужели Вы думает, что кто-то (кроме редких фанатов) будет влезать в физическую реализацию на платке которая стоит 2$ ??? Я например ожидаю, что если работать так как надо не будет - просто выкину и уйду в более дорогой сегмент где например есть полноценный питон или аналогичное, с нормальной отладкой и прочими плюшками.
Если изучение нюансов реализации вы считаете "редким фанатизмом" - вы вряд ли когда-нибудь научитесь писать эффективные программы. С таким подходом почему бы вам сразу не "уйти в более дорогой сегмент" и не тратить свое и чужое время на обьяснение того. что вам не интересно