Дополнительная flash-память

zzzzza
Offline
Зарегистрирован: 18.11.2016

Всем привет!

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

Есть ли внешнии модули, которые увеличивают flash-память? Или можно как-нибудь увеличить место для хранения скетча?

Заранее спасибо!

sadman41
Offline
Зарегистрирован: 19.10.2016

Замена микроконтроллера вам нужна, если действительно оптимизировали.

mixail844
Offline
Зарегистрирован: 30.04.2012

Вначале нужно понять что у вас раздувает память: если картинки, строки, файлы и т.п.  то есть та информация которую можно подгрузить во время выполнения скетча(а не во время компиляции),то можно добавить sd карту или другую энергонезависимую память и ао время исполнения скетча подгружать нужное.если нужно поместить исполняемый код,то как минимум править линковщик.

кстати ,вопрос к тем кто сюда заглянет : можно ли в среде ардуино настроить PROGMEM на работу с внешней энергонезаисимой  памятью,по шине I2C или SPI?или как то по другому нативно расширить адресное пространство(не RAM,о примере ардуино на 512КБ ,знаком)

sadman41
Offline
Зарегистрирован: 19.10.2016

Progmem наврядли можно прям вот так с полтычка, иначе давно бы уже все еепромы по i2c в полный рост пользовали. А вот какой-нить драйвер можно, наверное, накатать. Только медленный он будет. Или с доп. буфером, как для SD-карты мутить.

forfrends
Offline
Зарегистрирован: 24.02.2015

EEPROM использовать вообще не проблема. А вот если скетч не влазит - оптимизация, или замена контроллера.

Вообще чистый СИ очень сильно снижает вес программы. Но, как сказал mixail844, нужно определиться что там у вас за код, и что в нем используется. То что можно подгрузить - на флешку, а код перевести (хотя бы частично) в чистый СИ.

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

zzzzza, и RAM и PROGMEM находятся внутри адресного пространства процессора, а I2C или SPI - нет. Защищенного режима у AVR подобно как в 386+ тоже нет, значит программно прозрачная эмуляция тоже невозможна. Т.е. хранить константы где-то снаружи по I2C или SPI можно (написав для их добывания свои функции), а исполнять код из них - нет.

Могу порекомендовать Мегу 2560 - у нее и flash памяти побольше и при необходимости можно организовать внешнюю память в общем адресном пространстве.

forfrends
Offline
Зарегистрирован: 24.02.2015

Либо переходить на STM или ESP - вот там пямяти на много больше.

zzzzza
Offline
Зарегистрирован: 18.11.2016

Спасибо за ответы!

Очень много места занимает все то, что связано с дисплеем. Как подключаешь эту библиотеку, сразу минус 30-40 процентов памяти. И каждый вызов дисплейных функцей тоже немало места занимает. Как смог все вынес в функции, чтобы лишний раз их не вызывать.

Думал о меге, но у нее размер большой. Сейчас думаю между STM и Iskra JS. Больше в пользу Iskra JS, так как побаиваюсь, что памяти STM тоже может не хватить в будущем. Но придется переписывать все на JavaScript. Отсюда вопрос для тех кто сталкивался с микроконтроллерами с AVR процессорами, на которых установлен интерпретатор JavaScript: можно ли как-то писать код на Arduino Wiring?

Возможно, можно снести интерпретатор, но тогда придется писать на чистом СИ, а это, как я думаю, придется переписывать библиотеки, да и явно море проблем будет.

mixail844
Offline
Зарегистрирован: 30.04.2012

если не ошибаюсь,есть реализация arduino платформы на линейке STM32f4xx и там памяти от 256Kb до 1024Kb flash и RAM с лихвой.но ставить ардуино на такие кмни,имхо, микроскопом гвозди забивать.

без больших свединий,трудно что то еще посоветовать.

 

zzzzza
Offline
Зарегистрирован: 18.11.2016

mixail844 пишет:

если не ошибаюсь,есть реализация arduino платформы на линейке STM32f4xx и там памяти от 256Kb до 1024Kb flash и RAM с лихвой.но ставить ардуино на такие кмни,имхо, микроскопом гвозди забивать.

без больших свединий,трудно что то еще посоветовать.

 

Посмотрю, спасибо!

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

zzzzza пишет:

Очень много места занимает все то, что связано с дисплеем. Как подключаешь эту библиотеку, сразу минус 30-40 процентов памяти. И каждый вызов дисплейных функцей тоже немало места занимает.

Это нормально.

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

Цитата:

Думал о меге, но у нее размер большой.

Есть, например, Mega 2560 Core, у нее размер намного меньше.

Цитата:

Сейчас думаю между STM и Iskra JS. Больше в пользу Iskra JS, так как побаиваюсь, что памяти STM тоже может не хватить в будущем. Но придется переписывать все на JavaScript. Отсюда вопрос для тех кто сталкивался с микроконтроллерами с AVR процессорами, на которых установлен интерпретатор JavaScript: можно ли как-то писать код на Arduino Wiring?

Возможно, можно снести интерпретатор, но тогда придется писать на чистом СИ, а это, как я думаю, придется переписывать библиотеки, да и явно море проблем будет.

Что-то я совсем запутался: Вам нужно переписывать с JS на С или с С на JS?

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

MaksVV
Offline
Зарегистрирован: 06.08.2015

zzzzza пишет:
Думал о меге, но у нее размер большой.

есть меги чуть больше нано, очень удобно пользовать:

sadman41
Offline
Зарегистрирован: 19.10.2016

Не совсем согласен с предыдущим оратором насчет удобства. Оно очень относительное у конкретно этой меги. Если с проводками юзать , то еще ничего, но на макетку (стандартную, квадратно-гнездовую) сажать - это просто пи... Вот RX/TX у нее по разным сторонам пинхидера. Вывести их на другой, четырехконтактный с питанием и землей - это просто косы надо водить по плате. С I2C так же. Только вот закончил маяться с ней. Ну и у меня такое чуство, что с питанием там не очень хорошо. Подсадил на +5V этой меги дополнительно LCD с подсветкой - так стабилизатор начал резко греться. Пришлось перекидывать на выделенный DC-DC всю перефирию.

MaksVV
Offline
Зарегистрирован: 06.08.2015

sadman41 пишет:

Ну и у меня такое чуство, что с питанием там не очень хорошо. Подсадил на +5V этой меги дополнительно LCD с подсветкой - так стабилизатор начал резко греться. Пришлось перекидывать на выделенный DC-DC всю перефирию.

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

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

Ну и не вариант, если нужен доступ абсолютно ко всем пинам этой меги. В таком случае одностороннюю плату развести действительно сложно. Вот мой вариант, пинов 10..15 похоронил, да мне и не нужны они. 

 

alex_r61
Offline
Зарегистрирован: 20.06.2012

 Mega 2560 от RobotDyn такой же огрызок, как и большая. Нет многих выводов. Mega 2560 Core от Inhaos более удобная, все ножки разведены и расположены более грамотно. Интерфейсы с одной стороны, аналог с другой, порты A и C с торца, пины для управления дисплеем тоже с торца. И нет ничего лишнего Я когда купил первый TFT дисплей тоже столкнулся с нехваткой памяти на UNO. Потом взял библиотеку дисплея и всю перетряс. Убрал лишнее и заменил некоторые ардуиновские функции. В результате удалось уменьшить код почти в два раза.

b707
Offline
Зарегистрирован: 26.05.2017

zzzzza пишет:

Думал о меге, но у нее размер большой. Сейчас думаю между STM и Iskra JS. Больше в пользу Iskra JS, так как побаиваюсь, что памяти STM тоже может не хватить в будущем.

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

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

Подумайте о том, что "мего-проект" с кучей функций, возможно, удобнее разбить на 2-3 поменьше, каждый на своем МК. Ну и последнее - для экранов есть библиотеки без буфера, которые не отжирают 30-40% оперативки .

 

zzzzza
Offline
Зарегистрирован: 18.11.2016

О Mega 2560 Core даже не знал. Это отличный выход из моей ситуации, буду ее брать, спасибо!

sadman41
Offline
Зарегистрирован: 19.10.2016

MaksVV пишет:

а у вас точно от robotdyn? 

Точно, точно... Конечно, я еще и MCP с надеждой на то, что потянет, засадил туда. Но потом пощупал, поотключал, поподключал перефирию и решил, что ну его нафик - лучше MINI-360 дополнительно приделаю, чем мегу жарить.

MaksVV пишет:

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

Тут согласен на все 100% - из нее только паука настольного делать.

 

zzzzza
Offline
Зарегистрирован: 18.11.2016

b707 пишет:

Ну и последнее - для экранов есть библиотеки без буфера, которые не отжирают 30-40% оперативки .

Без буфера - это значит, что картинка на дисплее будет перерисовываться постоянно, то есть цвета пикселей не будут место в буфере занимать?

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Это http://arduino.ru/forum/proekty/samodelnaya-mega2560-128a-s-pamyatyu-512kb - видели? Удобная разводка, небольшой относительно размерчик 56х72мм (есть вариант побольше 56х88мм), все контакты Мега2560, мощный DC-преобразователь (5в х 5А), возможность навешать расширение SRAM, есть "большая SRAM" аж в 512 килобайт, есть "как" впихнуть это в ИДЕ ..

что ещё надо, чтобы встретить старость нормально работать? :)

zzzzza
Offline
Зарегистрирован: 18.11.2016

Arhat109-2 пишет:

Это http://arduino.ru/forum/proekty/samodelnaya-mega2560-128a-s-pamyatyu-512kb - видели? Удобная разводка, небольшой относительно размерчик 56х72мм (есть вариант побольше 56х88мм), все контакты Мега2560, мощный DC-преобразователь (5в х 5А), возможность навешать расширение SRAM, есть "большая SRAM" аж в 512 килобайт, есть "как" впихнуть это в ИДЕ ..

что ещё надо, чтобы встретить старость нормально работать? :)

Спасибо за предложение, но у меня пока что не такой уровень, чтобы платы печатать и паять их)

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Есть гербер, можно заказать в Китае.. :) Да и не так оно сложно оказалось на практике. А как сам-то боялся что нифига не выйдет!

ЛУТ - обеспечивает требуемую точность, там есть фотки самопальной платы .. тоже моя первая поделка, а если учесть что уже и глазки далеко "не те".. Для ЛУТ - можно просто брать svg-файл с форума и "пилить". Там стаб попроще на AMS1117 5в х 0.8А :)

Electrobit
Offline
Зарегистрирован: 19.09.2021

andriano пишет:
Могу порекомендовать Мегу 2560 - у нее и flash памяти побольше и при необходимости можно организовать внешнюю память в общем адресном пространстве.

Если я правильно понимаю, то флэш у МК Ардуино предназначен только для хранения программы. То есть, использовать флэш МК для хранения данных нельзя. К Ардуино можно подключать внешние модули флэш-памяти с интерфейсами I2C или SPI. Но это будет уже совершенно отдельное адресное пространство. Или я что-то не так понимаю в этом вопросе?