Помогите решить проблему

SurgutSkyDiver
Offline
Зарегистрирован: 19.10.2017

Мастерю штуковину на 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 байт.
Недостаточно памяти, программа может работать нестабильно

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

SD и дисплей намайна тянет только Мега. У SD  только буфер 512 байт жреть.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Вангую, что в самом скетче можно скроить несколько байт, оптимизировав его ;)

SurgutSkyDiver
Offline
Зарегистрирован: 19.10.2017

Блин. Ну мегу нет возможности использовать. Это маленькое устройство должно быть.

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Для начала, засуй все строки во флэш

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Как вариант использовать кучу. Создал объект, разрушил, создал другой. Где-то как программная виртуальная память. Но это требует черного пояса на Си++ и ООП.

kalapanga
Offline
Зарегистрирован: 23.10.2016

SurgutSkyDiver пишет:

Блин. Ну мегу нет возможности использовать. Это маленькое устройство должно быть.

Если на дисплей достаточно выводить только текст, то ищите альтернативу Адафруктовой библиотеке.

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

Ну, чтобы перечислить уж все варианты, упомяну STM32F103C8T6. По цене такой же, как и Про Мини, да и по размеру близкий, но в 10 раз больше оперативной памяти.

Но лично я бы либо постарался сэкономить на библиотеке дисплея, либо заменил SD на что-нибудь другое, например, на EEPROM 24C256.

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

andriano пишет:

Ну, чтобы перечислить уж все варианты, упомяну STM32F103C8T6. По цене такой же, как и Про Мини, да и по размеру близкий, но в 10 раз больше оперативной памяти.

А что насчет флэша - хватит при переходе с 8 на 32 бита?

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

Так это шина данных 8-разрядная, а команды - 16-разрядные. А у STM часть команд 16-разрядных, а часть - 32-разрядных. Правда, код инициализации побольше. Думаю, примерно так на так.

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

 

andriano пишет:

Ну, чтобы перечислить уж все варианты, упомяну STM32F103C8T6. По цене такой же, как и Про Мини, да и по размеру близкий, но в 10 раз больше оперативной памяти.

и на внешнем RTC можно будет съэкономить - у СТМ-ки уже на борту.

sadman41 пишет:

А что насчет флэша - хватит при переходе с 8 на 32 бита?

Мой (пока небольшой) опыт такой - программный код на СТМ32-дуино получается в 2 - 2.5 раза обьемнее, чем на Нано, данные - в 3-4 раза. Но с учетом того, что флеша там вчетверо, а оперативки в 10 раз больше - в СТМ-ку влезает больше :)

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

b707 пишет:

Мой (пока небольшой) опыт такой - программный код на СТМ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.

negavoid
Offline
Зарегистрирован: 09.07.2016

Моя фоторамка на Uno+SD+display не соглашается с тем, что места мало.

#include <Adafruit_GFX.h>        // Core graphics library
#include <AdaLGDP4535TFTLCD.h>   // Hardware-specific library
#include <SD.h>
#include <TrueRandom.h>

Adafruit_TFTLCD  tft( LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET );
File             root;

Sketch uses 24,848 bytes (80%) of program storage space. Maximum is 30,720 bytes.
Global variables use 1,046 bytes (51%) of dynamic memory, leaving 1,002 bytes for local variables. Maximum is 2,048 bytes.

Ещё и для библиотеки тача место остаётся, и на библиотеки датчиков тоже.

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

andriano пишет:

1. Насколько я помню, флеш там 64к. ТС, как следует из первого сообщения пользуется Pro Mini с 32к. Где я ошибся, откуда 4 раза?

Большая часть самых дешевых "синих плат" имеет 128к. Предполагается, что на самом деле это не STM32F103_C8T6, а ... CBT6, у которых и должно быть 128. Обьем можно посмотреть утилиткой для прошивки

andriano пишет:

2. Объем данных целиком определяется программистом, откуда вообще может взяться разница в 3-4 раза?

3. Объем, записываемый во флеш, в первом приближении можно считать как

Все это очень зависит от используемых библиотек и настроек компилятора. Обычный "блинк" для Наны имеет 9 байт данных, а он же для STM - более 900 байт. Настройками компилятора это можно уменьшить, но разница остается. Для средних скетчей(10к для Нано) у меня получаются те цифры, которые я написал.

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

negavoid пишет:

Моя фоторамка на Uno+SD+display не соглашается с тем, что места мало.

Да понятно, что те, кто жалуются на нехватку места - обычно чайники :) У них и код огромный, и что делать они не знают.

Нормальный программер, даже если не хватит места - не станет жалится об этом на форуме, а сам найдет решение

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013
andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

прикольная статья, но слишком много букв - не осилил,

вспомнился ZX Spectrum в 48 кб которого надо было уместить максимальное количество уровней игрушки+ саму прогу.

 

SLKH
Offline
Зарегистрирован: 17.08.2015

andycat пишет:

прикольная статья, но слишком много букв - не осилил,

вспомнился ZX Spectrum в 48 кб которого надо было уместить максимальное количество уровней игрушки+ саму прогу.

 

ZX Spectrum в 48 кб ?
Цитата:
ЭВМ ЕС-1010
 
Оперативная память построена на ферритовых сердечниках и имела емкость от 8 до 64 Кб с возможностью расширения блоками по 8 Кб.
 
Машина потребляла около 2 кВА от сети 380/220 В. Вентиляция воздушная. Площадь, занимаемая стандартным комплектом ЭВМ (без НМЛ), составляла 20 кв. м.
sadman41
Offline
Зарегистрирован: 19.10.2016

SLKH пишет:

ЭВМ ЕС-1010

 
Оперативная память построена на ферритовых сердечниках и имела емкость от 8 до 64 Кб с возможностью расширения блоками по 8 Кб.
 
Да, вот ЕС - силища... Спирт трехлитровыми банками... А сейчас чево - сжатым воздухом продувать приходится. Никакой романтики.