Помогите отимизировать код, не влазит в память.
- Войдите на сайт для отправки комментариев
Здравствуйте форумчане, прошу помощи как уменьшить данный код, просто первый раз работаю с OLED дисплеем, и очень много памяти занимает картинка которую хочу загрузить при начальном старте программы. Может как то можно сделать это компактнее или с помощью других библиотек. А хотелку еще не всю дописал. Может кому будет интересно, это будет дисплей встроенный в приборку ВАЗ 2106 с показания уровня газа в баллоне, температурой редуктора и окружающего воздуха, с значком ваз при включении зажигания ну или при старте процессора.
Выпадает ошибка: скетч использует 25422 байт (82%) памяти устройства. Всего доступно 30720 байт.Глобальные переменные используют 2628 байт (128%) динамической памяти, оставляя -580 байт для локальных переменных. Максимум: 2048 байт.
#include <U8g2lib.h> #include <OneWire.h> #include <DallasTemperature.h> U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // All Boards without Reset of the Display #define ONE_WIRE_BUS_1 A1 #define ONE_WIRE_BUS_2 A2 OneWire oneWire_1(ONE_WIRE_BUS_1); OneWire oneWire_2(ONE_WIRE_BUS_2); DallasTemperature sensor_1(&oneWire_1); DallasTemperature sensor_2(&oneWire_2); void setup() { u8g2.begin(); } void loop() { static const uint8_t VAZ [] = { 0x00,0x80,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xFC,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xFE,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x80,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38, 0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C, 0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C, 0xE0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E, 0xE0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E, 0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xF0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x3F, 0xF0,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x3F, 0xF8,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x3F, 0xF8,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x3F, 0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x3F, 0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x3F, 0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xF8,0xFF,0x3F, 0xFC,0xFF,0xF7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0xFC,0xFF,0xFF,0x3F, 0xFC,0xFF,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFC,0xFF,0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFC,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFC,0xFF,0x07,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFC,0xFF,0x07,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFC,0xFF,0x0F,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFE,0xFF,0x0F,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFE,0xFF,0x0F,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFE,0xFF,0x0F,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFE,0xFF,0x0F,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFE,0xFF,0x1F,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFE,0xFF,0x1F,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFE,0xFF,0x1F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFE,0xFF,0x1F,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFE,0xFF,0x1F,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFE,0xFF,0x3F,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFE,0xFF,0x3F,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFE,0xFF,0x7F,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFE,0xFF,0x7F,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFE,0xFF,0xFF,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFE,0xFF,0xFF,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFE,0xFF,0xFF,0x01,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFE,0xFF,0xFF,0x03,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFE,0xFF,0xFF,0x0F,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFE,0xFF,0xFF,0x3F,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFC,0xFF,0xFF,0xFF,0x03,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F, 0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x3F, 0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFE,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0x3F, 0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0x3F, 0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0x81,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x3F, 0xF0,0xFF,0xFF,0xFF,0xFF,0x7F,0xC0,0xFF,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x3F, 0xE0,0xFF,0xFF,0xFF,0xFF,0x0F,0xE0,0xFF,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x3F, 0xE0,0xFF,0xFF,0xFF,0xFF,0x03,0xF0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x3F, 0x00,0xFF,0xFF,0xFF,0xFF,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x3F, 0x00,0xFC,0xFF,0xFF,0x3F,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xF0,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x80,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xFC,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; u8g2.drawXBMP (0, 0, 128, 64, VAZ); delay(5000); YrovenGAZA(); delay(5000); TempGAZA (); delay(5000); TempOUT(); delay(5000); } void TempGAZA() { sensor_1.requestTemperatures();// читаем температуру 1 датчик int temp1 = sensor_1.getTempCByIndex(0); //считывание температуры 1 датчика u8g2.firstPage(); do { u8g2.setFontDirection(1); u8g2.setFont(u8g2_font_osb26_tn); u8g2.setCursor(102, 0); // set position u8g2.print(temp1); u8g2.drawCircle(120,50,5); u8g2.drawFrame(0,0,100,64); u8g2.drawFrame(1,1,98,62); if (temp1>=28) {u8g2.drawBox(4,6,10,52); u8g2.drawBox(15,6,10,52); u8g2.drawBox(26,6,10,52); } else if (temp1>=27) { u8g2.drawBox(4,6,10,52); u8g2.drawBox(15,6,10,52); } else if (temp1>=26) { u8g2.drawBox(4,6,10,52); } } while (u8g2.nextPage()); delay(500); } void TempOUT(){ //sensor_2.requestTemperatures();// читаем температуру 2 датчик //int temp2 = sensor_2.getTempCByIndex(0); //считывание температуры 2 датчика sensor_1.requestTemperatures();// читаем температуру 1 датчик int temp1 = sensor_1.getTempCByIndex(0); //считывание температуры 1 датчика u8g2.firstPage(); do { u8g2.setFontDirection(1); u8g2.setFont(u8g2_font_osb26_tn); u8g2.setCursor(102, 0); // set position u8g2.print(temp1); u8g2.setFont(u8g2_font_luBS08_tf); u8g2.drawStr(0,0,"-20"); u8g2.drawStr(24,0,"0"); u8g2.drawStr(48,0,"20"); u8g2.drawStr(72,0,"40"); u8g2.drawTriangle(0,64, 10,64, 10,57); u8g2.drawBox(12,57,10,64); u8g2.drawTriangle(12,57, 22,57, 22,50); u8g2.drawBox(24,50,10,64); u8g2.drawTriangle(24,50, 34,50, 34,43); //u8g2.drawBox(36,0,10,22); //u8g2.drawTriangle(36,22, 46,22, 46,28); //u8g2.drawBox(48,0,10,29); //u8g2.drawTriangle(48,29, 58,29, 58,35); //u8g2.drawBox(60,0,10,36); //u8g2.drawTriangle(60,36, 70,36, 70,42); //u8g2.drawBox(72,0,10,43); //u8g2.drawTriangle(72,43, 82,43, 82,49); //u8g2.drawBox(84,0,10,50); //u8g2.drawTriangle(84,50, 94,50, 94,56); } while (u8g2.nextPage()); delay(500); } void YrovenGAZA() { u8g2.firstPage(); do { u8g2.setFontDirection(1); u8g2.setFont(u8g2_font_osb26_tn); u8g2.drawStr(102,0,"23"); u8g2.setFont(u8g2_font_osb26_tf); u8g2.drawStr(102,45,"L"); //u8g2.drawCircle(120,50,5); //u8g2.drawFrame(0,0,100,64); //u8g2.drawFrame(1,1,98,62); //u8g2.drawBox(4,6,10,52); //u8g2.drawBox(15,6,10,52); //u8g2.drawBox(26,6,10,52); //u8g2.drawBox(37,6,10,52); //u8g2.drawBox(48,6,10,52); //u8g2.drawBox(59,6,10,52); //u8g2.drawBox(70,6,10,52); //u8g2.drawBox(81,6,10,52); //u8g2.drawBox(92,6,4,52); u8g2.setFontDirection(1); u8g2.setFont(u8g2_font_luBS08_tf); u8g2.drawStr(0,48,"30"); u8g2.drawStr(24,48,"50"); u8g2.drawStr(48,48,"70"); u8g2.drawStr(72,48,"90"); u8g2.drawTriangle(0,0, 10,0, 10,7); u8g2.drawBox(12,0,10,8); u8g2.drawTriangle(12,8, 22,8, 22,14); u8g2.drawBox(24,0,10,15); u8g2.drawTriangle(24,15, 34,15, 34,21); u8g2.drawBox(36,0,10,22); u8g2.drawTriangle(36,22, 46,22, 46,28); u8g2.drawBox(48,0,10,29); u8g2.drawTriangle(48,29, 58,29, 58,35); u8g2.drawBox(60,0,10,36); u8g2.drawTriangle(60,36, 70,36, 70,42); u8g2.drawBox(72,0,10,43); u8g2.drawTriangle(72,43, 82,43, 82,49); u8g2.drawBox(84,0,10,50); u8g2.drawTriangle(84,50, 94,50, 94,56); } while ( u8g2.nextPage() ); //delay(1000); }
Кто код писал?
Вытащи для начала свой VAZ из loop и запхай его в PROGMEM
http://arduino.ru/forum/apparatnye-voprosy/podklyuchenie-displeya-gmg128...
Аналогичная проблема решена.
+ массив с картинкой следует держать в PROGMEM.
Спасибо. Я и думал что надо картинку держать в отдельной памяти. Но нечего толкового не нашел. Может плохо искал. Пошол читать, с этой функции ещё не знаком буду изучать. Ещё раз большое спасибо.
И за библиотеку понял, про разное подключение . Буду пробовать.
Вот моя тема, как раз про ту функцию :-)
http://arduino.ru/forum/proekty/imitatsiya-razlichnykh-shkal-na-displee-...
AndryGladky, отвечая исключительно на название темы, а не на то, что в исходном сообщении:
То, о чем Вы говорите, нецелесообразно, т.к. оптимизация в сотни раз дороже, чем взять контроллер помощнее.
Теперь переходим к самому сообщению, и выясняем, что оно не соответствует заголовку: ни о какой оптимизации в сообщении речи не идет.