Добавить память программ к Nano (Atmega328)
- Войдите на сайт для отправки комментариев
Сб, 31/01/2015 - 17:03
Добрый день!
На стадии завершения проекта столкнулся с нехваткой памяти программ, не хватает буквальо 1-2 кб. Можно ли часть программы как то пристроить во внутреннюю еепром или во внешнюю I2C ?
Используются библиотеки
include <Wire.h>
#include <DS1307.h>
#include <TinyGPS++.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include "U8glib.h".
Может быть есть какие то тонкости их использования в плане экономии места?
Заранее спасибо!
Например выкинуть DallasTemperature.h и сделать просто на Wire (примеры есть и не сложнее чем с либой) в районе 1-1,5К освободите. Та же судьба с DS1307.h, тоже 1К примерно. Остальные не знаю, не работал с ними.
программу можно хранить на sd карте. http://bitlash.net
Я в аглицкой мове не силен, а как ее оттуда запускать?
при компиляции компилятор прописывает всю либу или только те функции, которые используются ?
Как уже говорили, избався от <DS1307.h> и <DallasTemperature.h>, они откровенно лишние. И ещё доработай напильником остальные библиотеки, там обычно есть что выкинуть в конкретной задаче.
Избавился от ненужного, попилил лишнее, добавил функционал и опять уперся в память. такие мысли:
В отличии от УНО, нана программируется по последовательному порту, а в память живет порядка 2 кб загрузчика. У УНЫ я так понял на программирование свой процессор, который шьет по СПЙ.
1) Взять уну, выдрать из нее мегу, проводками соединить ножки СПЙ и питания и шить как уно. Не будет ли различий для компилятора ? У уно меньше ножек портов чем у нано, не будет ли проблем ?
2) Если Ардуино ИДЕ генерит где то хекс файл - зашить его с помощью любого спй программатора , хоть понипрогом.
Как обойти ограничение по память в ИДЕ в этом случае ? или просто указывать плату Уно и не париться ?
Поменять камень - не предлагать, т.к. уже разведена и собрана плата с обвязкой. в следующий раз сразу мегу поставлю.
Вы уж лучше код выложите, может подскажут что еще запилить можно. Ну не верю я в 30К кода.
Выкладываю. Панель приборов для катера. Графика, цифры, измерения. В проекте много вкладок, а все просто в один текстовик перекопировал, если провильно понимаю.
Мдя, из простого - убрать библиотеку DS1307.h, есть где работает через Wire, как ваш BMP (примерно 1К освободит). Радикально - менять дисплей на обычный lcd, там сразу процентов 30 освободите.
Ну за замену дисплея спасибо конечно :)))
1307 смысла нет убирать, компилятся только те функции которую пользуются. там с десятока байт высвобождаются. тоже самое что с БМП, что с библиотекой порезанной, что ручками написанной
В boards.txt есть определения платы, у каждой абзац текста. Надо найти плату uno или какая там используется, в соответствующем абзаце будет строка uploadmaximum или uploadlimit, хз. И цифра 30720. Или больше но меньше 32768. Поменяйте на 32768, если скетч соберётся - можно будет зашить USBASP или ArduinoISP программатором. Т. о. без загрузчика.
Лижбы оперативы хватило.
u8glib очень много ест, есть выбрать более компактный фонт
и согласен с std - шьем без загрузчика на полный размер памяти
Спасибо !
Фонты и так все порезал, три оставил. Для отображения скорости и оборотов нужно большой юзать. Буквенный микрофонт, подписи делать. параметры покрупнее только цифровой шрифт, ну и самый крупный 42й цифровой шрифт. если отключить большой шрифт - все вроде упихивается. т.е в 30720 укладываюсь, шрифт около 1500 весит, его могу в самую последнюю очередь подключить и шить уже сторонним.
Вопрос, как привязать к арудуине сторонний программатор ? или скажите где появляется результирующий HEX файл, чтобы его можно было бы в сторонний программатор использовать.
Можно ли другую ардуину запользовать вместо программатора ?
optiboot жрет 512 байт вместо 2K
граждане профи, расшифровывайте плиз для новичков! желательно с картинками :)
граждане профи, расшифровывайте плиз для новичков! желательно с картинками :)
бутлоадер себе другой вшей http://homes-smart.ru/index.php/oborudovanie/arduino/avr-zagruzchik сразу на 1.5к больше будет.
Товарищи, не подскажете, откуда тут 1.5к кода набегает ?:( Процедура работы с бародатчиком по И2С.
сначала вызываетеся один раз PResSetup(), а потом в цикле обновления Pres(). Результат уходит в int baro;
А "Wire" по Вашему ничего не занимает?
Я не настолько силен, но мне казалось Wire это процедура (подпрограмма) у которой меняются только входные параметры. или это макрос ?
Подпрограмма, но она же тоже в память попадает.
Так попадает один раз, а вызывается 20 раз с разными параметрами. каждый вызов 70 кб чтоли ??
так в ней куча переменных
Такой скетч 1710 байт:
А такой 466 байт:
Не согласен. Wire.h у меня обслуживает еще RTC DS1307, так что библиотека никуда не отключается. Убираю только приведенную часть кода, и минус полтора кб. Может в этом участке что не так ? по сути 3 процедуры вызываются write,read, request с разными переменными величиной с байт. При этом Wire- это аппаратный I2C и wire.write(byteconst) равносильна
ldi r16,byteconst
out TWDR,r16 Это так навскидку, ну плюс проверка состояния, туда сюда, ну это все в байт 300 на асме вписать можно, откуда полтора кило :(
А есть ли какой контроллер чтобы как атмега 328 но с большей памятью, а по корпусу такой же ? чтобы просто перепаять. все ужал, загрузчик выкинул, а всеравно не хватает пару кб :((((
а в каком он у вас корпусе? они разные бывают.
У меня ардуино нано, распаяна на макетажной плате. на ней же дисплей, часы, датчики, ЖПС, уже корпус под все это дело сделан . На нане стоит атмега 328 в планарном корпусе. Вот в таком же бы корпусе с таким же назначением выводов но с большей памятью.... типа есть же наны со 168 мегой. и с 328.. вот какая нибудь 628 была бы. чтобы не ужимаясь проект закончить...
По распиновке 1 в 1 ? среда ардуино ее поддерживает ? штатный ботлоадер нановский можно в нее залить ?
Теоретически после доработки напильником будет поддерживать.
KVadik, это ж как нужно поработать напильником, что бы контроллер в корпусе tqfp64(44) припаять на место tqfp32 ? :))
Атмега 64м1 идентична по корпусу атмеге32М1. там какие то заморочки с ацп и портами. напилинг больше программный
Что то подумал, а не проще ли сверху напаять вторую нану, прямо на первую. типа ножки все совпадут... плату перепахивать не надо... но часть функций с первой наны, перевести на вторую.. а связать по уже используемой I2c... ???
Атмега 64м редкая оказалась, и стоит больше чем 2 наны... и будет 64 кв... медленные операции на одну нану, а дисплей на другую... частота рефреша повысится... шрифтов и мулек можно добавить.... функционал расширить.... а если надо и третью нану сверху поставить....
В терминаторе не с этого восстание роботов началось случайно ? ... :)
Kazanova, вам какая разница идентична или нет мега 64-я меге 32-й?, эти модели контроллеров в корпусах от 44 ног, вы же хотели запаять вместо меги 328, у которой 32 ноги. Вам единственный выход приобрести уменьшенную версию ардуино мега, что-б была размерами как нано. Какой-нить Teensy 3.0, (у которого кстати 130 кило флэша), будт точно в самый раз )
Тоже самое количество ног ведь?
Kazanova, да погуглил даташит, и впрямь есть такой зверь )
Только в магазинах нету :(
KVadik, это ж как нужно поработать напильником, что бы контроллер в корпусе tqfp64(44) припаять на место tqfp32 ? :))
В моей вселенной
Atmel ATmega16M1/32M1/64M1 TQFP32/QFN32 (7mm × 7mm) package
А "напильником дорабатывать" я про софт
Что то подумал, а не проще ли сверху напаять вторую нану, прямо на первую. типа ножки все совпадут... плату перепахивать не надо... но часть функций с первой наны, перевести на вторую.. а связать по уже используемой I2c... ???
Атмега 64м редкая оказалась, и стоит больше чем 2 наны... и будет 64 кв... медленные операции на одну нану, а дисплей на другую... частота рефреша повысится... шрифтов и мулек можно добавить.... функционал расширить.... а если надо и третью нану сверху поставить....
В терминаторе не с этого восстание роботов началось случайно ? ... :)
а как вы этот бутерброд программировать собираетесь (в смысле скетчи в него заливать)?
имхо, проще или с ардуино на атмел студио переучиться (там код будет оптимальнее) или на мегу2560 перейти, смотря к чему больше голова и руки заточены.
Ну как, 2 платы, 2 УСБ. скеч разделить на 2, просто по и2с данные организовать.
Асм я и так неплохо знаю, но вот переписать графическую библиотеку или ЖПС библиотеку - это очень непросто и очень долго. Лучше нану за 100р купить :)
У меня не макетка, у меня уже оконечное устройство, типа с материнской платой, периферией, дисплеем . Ардуино мега туда уже не встанет.
Я как сделаю, отчитаюсь .
Kazanova, а вариант тинси не рассматривали? Дороговато конечно, но так и круче)
KVadik, это ж как нужно поработать напильником, что бы контроллер в корпусе tqfp64(44) припаять на место tqfp32 ? :))
кстати, я вот что подумал, а не такая это уж и проблемма, берется вот такой переходник и проводочками приапаеваемся куда надо.
Это мой первый проект на ардуине, я не думал что столько кода получится. теперь примерно прикидываю на будущие по объему памяти. Сейчас надо как то оперативно решить и за новый проект браться.