Помогите решить проблему
- Войдите на сайт для отправки комментариев
Чт, 19/10/2017 - 19:05
Мастерю штуковину на Arduino pro mini.
Планирую подключить:
-модуль для SD карт
-bmp280
-LCD5100
-RTC DS3231
Всё по отдельности оттестировал. Начал потихоньку собирать в кучу и сходу столкнулся с нехваткой памяти при использовании одновременно и дисплея и SD карты. Может какие то библиотеки использовать другие для работы с дисплеем или с карточкой?
#include <SPI.h> #include <SD.h> #include <DS1307RTC.h> #include <Adafruit_GFX.h> #include <Adafruit_PCD8544.h> #define DISP_RST 3 #define DISP_CE 4 #define DISP_DC 5 #define DISP_DIN 6 #define DISP_CLK 7 #define PIN_CS 10 #define buttonPin 2 Adafruit_PCD8544 display = Adafruit_PCD8544(DISP_CLK, DISP_DIN, DISP_DC, DISP_CE, DISP_RST); File myFile; Скетч использует 22420 байт (72%) памяти устройства. Всего доступно 30720 байт. Глобальные переменные используют 1853 байт (90%) динамической памяти, оставляя 195 байт для локальных переменных. Максимум: 2048 байт. Недостаточно памяти, программа может работать нестабильно
SD и дисплей намайна тянет только Мега. У SD только буфер 512 байт жреть.
Вангую, что в самом скетче можно скроить несколько байт, оптимизировав его ;)
Блин. Ну мегу нет возможности использовать. Это маленькое устройство должно быть.
Для начала, засуй все строки во флэш
Как вариант использовать кучу. Создал объект, разрушил, создал другой. Где-то как программная виртуальная память. Но это требует черного пояса на Си++ и ООП.
Блин. Ну мегу нет возможности использовать. Это маленькое устройство должно быть.
Если на дисплей достаточно выводить только текст, то ищите альтернативу Адафруктовой библиотеке.
Ну, чтобы перечислить уж все варианты, упомяну STM32F103C8T6. По цене такой же, как и Про Мини, да и по размеру близкий, но в 10 раз больше оперативной памяти.
Но лично я бы либо постарался сэкономить на библиотеке дисплея, либо заменил SD на что-нибудь другое, например, на EEPROM 24C256.
Ну, чтобы перечислить уж все варианты, упомяну STM32F103C8T6. По цене такой же, как и Про Мини, да и по размеру близкий, но в 10 раз больше оперативной памяти.
А что насчет флэша - хватит при переходе с 8 на 32 бита?
Так это шина данных 8-разрядная, а команды - 16-разрядные. А у STM часть команд 16-разрядных, а часть - 32-разрядных. Правда, код инициализации побольше. Думаю, примерно так на так.
Ну, чтобы перечислить уж все варианты, упомяну STM32F103C8T6. По цене такой же, как и Про Мини, да и по размеру близкий, но в 10 раз больше оперативной памяти.
и на внешнем RTC можно будет съэкономить - у СТМ-ки уже на борту.
А что насчет флэша - хватит при переходе с 8 на 32 бита?
Мой (пока небольшой) опыт такой - программный код на СТМ32-дуино получается в 2 - 2.5 раза обьемнее, чем на Нано, данные - в 3-4 раза. Но с учетом того, что флеша там вчетверо, а оперативки в 10 раз больше - в СТМ-ку влезает больше :)
Мой (пока небольшой) опыт такой - программный код на СТМ32-дуино получается в 2 - 2.5 раза обьемнее, чем на Нано, данные - в 3-4 раза. Но с учетом того, что флеша там вчетверо, а оперативки в 10 раз больше - в СТМ-ку влезает больше :)
Мой опыт вообще ограничивается Arduino Due, но (возможно именно поэтому) возникли вопросы:
1. Насколько я помню, флеш там 64к. ТС, как следует из первого сообщения пользуется Pro Mini с 32к. Где я ошибся, откуда 4 раза?
2. Объем данных целиком определяется программистом, откуда вообще может взяться разница в 3-4 раза? (строго говоря, в программировании различаются адреса и данные. Адреса, очевидно, отличаются не более чем в 2 раза, а данные должны быть один в один)
3. Объем, записываемый во флеш, в первом приближении можно считать как A + B*C, где A - объем кода инициализации (константа), C - объем скетча, а B - константа. По моим прикидкам B должен быть между 1 и 2, а вот А у СТМ во много раз больше, чем у AVR. Поэтому на совсем маленьких скетчах объем кода может различаться в десятки раз, а по мере его увеличения этот коэффициент должен уменьшаться, стремясь к величине порядка 1.5.
Моя фоторамка на Uno+SD+display не соглашается с тем, что места мало.
Ещё и для библиотеки тача место остаётся, и на библиотеки датчиков тоже.
1. Насколько я помню, флеш там 64к. ТС, как следует из первого сообщения пользуется Pro Mini с 32к. Где я ошибся, откуда 4 раза?
Большая часть самых дешевых "синих плат" имеет 128к. Предполагается, что на самом деле это не STM32F103_C8T6, а ... CBT6, у которых и должно быть 128. Обьем можно посмотреть утилиткой для прошивки
2. Объем данных целиком определяется программистом, откуда вообще может взяться разница в 3-4 раза?
3. Объем, записываемый во флеш, в первом приближении можно считать как
Все это очень зависит от используемых библиотек и настроек компилятора. Обычный "блинк" для Наны имеет 9 байт данных, а он же для STM - более 900 байт. Настройками компилятора это можно уменьшить, но разница остается. Для средних скетчей(10к для Нано) у меня получаются те цифры, которые я написал.
Моя фоторамка на Uno+SD+display не соглашается с тем, что места мало.
Да понятно, что те, кто жалуются на нехватку места - обычно чайники :) У них и код огромный, и что делать они не знают.
Нормальный программер, даже если не хватит места - не станет жалится об этом на форуме, а сам найдет решение
https://geektimes.ru/post/27055/
прикольная статья, но слишком много букв - не осилил,
вспомнился ZX Spectrum в 48 кб которого надо было уместить максимальное количество уровней игрушки+ саму прогу.
прикольная статья, но слишком много букв - не осилил,
вспомнился ZX Spectrum в 48 кб которого надо было уместить максимальное количество уровней игрушки+ саму прогу.
ЭВМ ЕС-1010