Дополнительная flash-память
- Войдите на сайт для отправки комментариев
Пт, 21/09/2018 - 00:09
Всем привет!
Столкнулся с проблемой нехватки flash-памяти - не хватает места для хранения скетча. Оптимизировал код как можно, а надо еще много всего добавить.
Есть ли внешнии модули, которые увеличивают flash-память? Или можно как-нибудь увеличить место для хранения скетча?
Заранее спасибо!
Замена микроконтроллера вам нужна, если действительно оптимизировали.
Вначале нужно понять что у вас раздувает память: если картинки, строки, файлы и т.п. то есть та информация которую можно подгрузить во время выполнения скетча(а не во время компиляции),то можно добавить sd карту или другую энергонезависимую память и ао время исполнения скетча подгружать нужное.если нужно поместить исполняемый код,то как минимум править линковщик.
кстати ,вопрос к тем кто сюда заглянет : можно ли в среде ардуино настроить PROGMEM на работу с внешней энергонезаисимой памятью,по шине I2C или SPI?или как то по другому нативно расширить адресное пространство(не RAM,о примере ардуино на 512КБ ,знаком)
Progmem наврядли можно прям вот так с полтычка, иначе давно бы уже все еепромы по i2c в полный рост пользовали. А вот какой-нить драйвер можно, наверное, накатать. Только медленный он будет. Или с доп. буфером, как для SD-карты мутить.
EEPROM использовать вообще не проблема. А вот если скетч не влазит - оптимизация, или замена контроллера.
Вообще чистый СИ очень сильно снижает вес программы. Но, как сказал mixail844, нужно определиться что там у вас за код, и что в нем используется. То что можно подгрузить - на флешку, а код перевести (хотя бы частично) в чистый СИ.
zzzzza, и RAM и PROGMEM находятся внутри адресного пространства процессора, а I2C или SPI - нет. Защищенного режима у AVR подобно как в 386+ тоже нет, значит программно прозрачная эмуляция тоже невозможна. Т.е. хранить константы где-то снаружи по I2C или SPI можно (написав для их добывания свои функции), а исполнять код из них - нет.
Могу порекомендовать Мегу 2560 - у нее и flash памяти побольше и при необходимости можно организовать внешнюю память в общем адресном пространстве.
Либо переходить на STM или ESP - вот там пямяти на много больше.
Спасибо за ответы!
Очень много места занимает все то, что связано с дисплеем. Как подключаешь эту библиотеку, сразу минус 30-40 процентов памяти. И каждый вызов дисплейных функцей тоже немало места занимает. Как смог все вынес в функции, чтобы лишний раз их не вызывать.
Думал о меге, но у нее размер большой. Сейчас думаю между STM и Iskra JS. Больше в пользу Iskra JS, так как побаиваюсь, что памяти STM тоже может не хватить в будущем. Но придется переписывать все на JavaScript. Отсюда вопрос для тех кто сталкивался с микроконтроллерами с AVR процессорами, на которых установлен интерпретатор JavaScript: можно ли как-то писать код на Arduino Wiring?
Возможно, можно снести интерпретатор, но тогда придется писать на чистом СИ, а это, как я думаю, придется переписывать библиотеки, да и явно море проблем будет.
если не ошибаюсь,есть реализация arduino платформы на линейке STM32f4xx и там памяти от 256Kb до 1024Kb flash и RAM с лихвой.но ставить ардуино на такие кмни,имхо, микроскопом гвозди забивать.
без больших свединий,трудно что то еще посоветовать.
если не ошибаюсь,есть реализация arduino платформы на линейке STM32f4xx и там памяти от 256Kb до 1024Kb flash и RAM с лихвой.но ставить ардуино на такие кмни,имхо, микроскопом гвозди забивать.
без больших свединий,трудно что то еще посоветовать.
Посмотрю, спасибо!
Очень много места занимает все то, что связано с дисплеем. Как подключаешь эту библиотеку, сразу минус 30-40 процентов памяти. И каждый вызов дисплейных функцей тоже немало места занимает.
Это нормально.
Дисплей - слишком тяжелая вещь для микроконтроллера начального уровня. Поэтому естественно, что, если используется, то занимает значительную часть ресурсов.
Думал о меге, но у нее размер большой.
Есть, например, Mega 2560 Core, у нее размер намного меньше.
Сейчас думаю между STM и Iskra JS. Больше в пользу Iskra JS, так как побаиваюсь, что памяти STM тоже может не хватить в будущем. Но придется переписывать все на JavaScript. Отсюда вопрос для тех кто сталкивался с микроконтроллерами с AVR процессорами, на которых установлен интерпретатор JavaScript: можно ли как-то писать код на Arduino Wiring?
Возможно, можно снести интерпретатор, но тогда придется писать на чистом СИ, а это, как я думаю, придется переписывать библиотеки, да и явно море проблем будет.
Что-то я совсем запутался: Вам нужно переписывать с JS на С или с С на JS?
С моейц точки зрения JS на микроконтроллере - это вообще нонсенс и может подходить только для специфического учебного, но никак не для реального проекта.
есть меги чуть больше нано, очень удобно пользовать:
Не совсем согласен с предыдущим оратором насчет удобства. Оно очень относительное у конкретно этой меги. Если с проводками юзать , то еще ничего, но на макетку (стандартную, квадратно-гнездовую) сажать - это просто пи... Вот RX/TX у нее по разным сторонам пинхидера. Вывести их на другой, четырехконтактный с питанием и землей - это просто косы надо водить по плате. С I2C так же. Только вот закончил маяться с ней. Ну и у меня такое чуство, что с питанием там не очень хорошо. Подсадил на +5V этой меги дополнительно LCD с подсветкой - так стабилизатор начал резко греться. Пришлось перекидывать на выделенный DC-DC всю перефирию.
Ну и у меня такое чуство, что с питанием там не очень хорошо. Подсадил на +5V этой меги дополнительно LCD с подсветкой - так стабилизатор начал резко греться. Пришлось перекидывать на выделенный DC-DC всю перефирию.
а у вас точно от robotdyn? там вроде как наоборот получше питание сделано. Насчет удобства имел ввиду что большую мегу на пины не посадишь, только если попой к верху, не говоря про размеры.
Мега мини для меня неудобна только тем, что, дейтсвительно, перемычек кучу ставить приходится, чтобы перекрещивание дорожек развести между собой.
Ну и не вариант, если нужен доступ абсолютно ко всем пинам этой меги. В таком случае одностороннюю плату развести действительно сложно. Вот мой вариант, пинов 10..15 похоронил, да мне и не нужны они.
Mega 2560 от RobotDyn такой же огрызок, как и большая. Нет многих выводов. Mega 2560 Core от Inhaos более удобная, все ножки разведены и расположены более грамотно. Интерфейсы с одной стороны, аналог с другой, порты A и C с торца, пины для управления дисплеем тоже с торца. И нет ничего лишнего Я когда купил первый TFT дисплей тоже столкнулся с нехваткой памяти на UNO. Потом взял библиотеку дисплея и всю перетряс. Убрал лишнее и заменил некоторые ардуиновские функции. В результате удалось уменьшить код почти в два раза.
Думал о меге, но у нее размер большой. Сейчас думаю между STM и Iskra JS. Больше в пользу Iskra JS, так как побаиваюсь, что памяти STM тоже может не хватить в будущем.
Iskra JS - даже не думайте, это недоразумение. К JS в разы меньше периферических библиотек, чем для Си - так что первое, с чем вы сталкнетесь - что половину программы придется переписывать с нуля.
Насчет "памяти может не хватить в будущем" - сорри, это так типично для новичков :) Основных проблем две - желание запихнуть "все и вся" в свой первый проект , помноженное на неумение кодить, в результате чего код знамает втрое больше места, чем у профи.
Подумайте о том, что "мего-проект" с кучей функций, возможно, удобнее разбить на 2-3 поменьше, каждый на своем МК. Ну и последнее - для экранов есть библиотеки без буфера, которые не отжирают 30-40% оперативки .
О Mega 2560 Core даже не знал. Это отличный выход из моей ситуации, буду ее брать, спасибо!
а у вас точно от robotdyn?
Точно, точно... Конечно, я еще и MCP с надеждой на то, что потянет, засадил туда. Но потом пощупал, поотключал, поподключал перефирию и решил, что ну его нафик - лучше MINI-360 дополнительно приделаю, чем мегу жарить.
Тут согласен на все 100% - из нее только паука настольного делать.
Ну и последнее - для экранов есть библиотеки без буфера, которые не отжирают 30-40% оперативки .
Без буфера - это значит, что картинка на дисплее будет перерисовываться постоянно, то есть цвета пикселей не будут место в буфере занимать?
Это http://arduino.ru/forum/proekty/samodelnaya-mega2560-128a-s-pamyatyu-512kb - видели? Удобная разводка, небольшой относительно размерчик 56х72мм (есть вариант побольше 56х88мм), все контакты Мега2560, мощный DC-преобразователь (5в х 5А), возможность навешать расширение SRAM, есть "большая SRAM" аж в 512 килобайт, есть "как" впихнуть это в ИДЕ ..
что ещё надо, чтобы
встретить старостьнормально работать? :)Это http://arduino.ru/forum/proekty/samodelnaya-mega2560-128a-s-pamyatyu-512kb - видели? Удобная разводка, небольшой относительно размерчик 56х72мм (есть вариант побольше 56х88мм), все контакты Мега2560, мощный DC-преобразователь (5в х 5А), возможность навешать расширение SRAM, есть "большая SRAM" аж в 512 килобайт, есть "как" впихнуть это в ИДЕ ..
что ещё надо, чтобы
встретить старостьнормально работать? :)Спасибо за предложение, но у меня пока что не такой уровень, чтобы платы печатать и паять их)
Есть гербер, можно заказать в Китае.. :) Да и не так оно сложно оказалось на практике. А как сам-то боялся что нифига не выйдет!
ЛУТ - обеспечивает требуемую точность, там есть фотки самопальной платы .. тоже моя первая поделка, а если учесть что уже и глазки далеко "не те".. Для ЛУТ - можно просто брать svg-файл с форума и "пилить". Там стаб попроще на AMS1117 5в х 0.8А :)
Если я правильно понимаю, то флэш у МК Ардуино предназначен только для хранения программы. То есть, использовать флэш МК для хранения данных нельзя. К Ардуино можно подключать внешние модули флэш-памяти с интерфейсами I2C или SPI. Но это будет уже совершенно отдельное адресное пространство. Или я что-то не так понимаю в этом вопросе?