При использовании в программе нескольких библиотек возникает проблема дефицита оперативной памяти.
Для UNO совсем не хватает, для Leonardo выглядит так:
// библиотека для SD карт
#include <SPI.h>
#include <SD.h>
// библиотека для эмуляции Serial порта
#include <SoftwareSerial.h>
// библиотека для работы с GPRS устройством
#include <GPRS_Shield_Arduino.h>
// библиотека wire
#include <Wire.h>
// библиотека дисплея на шине I2C
#include <LiquidCrystal_I2C.h>
Сообщение компилятора:
Global variables use 2 089 bytes (81%) of dynamic memory, leaving 471 bytes for local variables. Maximum is 2 560 bytes.
Low memory available, stability problems may occur.
Вопрос:
Есть ли какие приемы оптимизации, или нужно использовать другой контроллер?
Оптимизация использования оперативной памяти
- БлудныйКот
- Сообщения: 45
- Зарегистрирован: 29 дек 2016, 16:19
Re: Оптимизация использования оперативной памяти
Я бы попробовал почистить либы от ненужных условий и от подключаемых файлов. Так хоть немного сэкономите память. Я таким образом чистил библиотеку UTFT которая больно уж забита всяким мусором. Например если вы работаете на уно или нано то выкинуть из кода всё что связано с другими бордами ардуино.
После чистки UTFT даже немного увеличилась скорость заливки экрана.
После чистки UTFT даже немного увеличилась скорость заливки экрана.
Re: Оптимизация использования оперативной памяти
В моём случае самым эффективным способом сэкономить ОЗУ, оказался макрос F() для вывода строк на дисплей и в serial порт.
lcd.print( F( "message" ) );
Serial.print( F( "message" ) );
Экономия 2 байта на каждый символ. Теперь строки хранятся во флэш памяти, а её в разы больше.
lcd.print( F( "message" ) );
Serial.print( F( "message" ) );
Экономия 2 байта на каждый символ. Теперь строки хранятся во флэш памяти, а её в разы больше.
Вернуться в «Программирование Ардуино»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей