Оптимизация скетча. Проблема: Нехватка ОЗУ

Для начала посчитать, сколько у вас светодиодов, умножить их количество на 3 и получить количество динамической памяти, нужной ТОЛЬКО для буфера. А потом уже думать, а не слишком ли вы того… ))

А что, на файлообменник, который не блокирует российские IP никак нельзя было выложить? Религия не позволила?

подскажите куда выложить я выложу я ж не в курсе что они у вас не работают

В итоге, когда я слил всё вместе, оно не компилируется. Переопределены один и те же имена и т.п.

Пожалуйста, выложите код целиком так, чтобы мог его откомпилировать. Иначе, это всё в пользу бедных.

led_matrix_Font — Яндекс Диск сюда положил думаю яндекс должен работать

Вы не поняли. Выложите всё, как оно должно лежать в папке. Чтобы я просто распаковал и скомпилировал ничего никуда не перемещая. Ручным слиянием того, что Вы выложили здесь и того, что на файлообменнике, я скомпилировать не смог.

всё понял извиняюсь сейчас доложил библиотеки. Ссылка та же

А что, тот текст, что Вы выкладывали здесь - он совсем не нужен? В том .ino файле, что в архиве всё, что нужно есть?

да всё есть

Ну, сейчас я посмотрю, кто там больше всех памяти ест. А пока … надеюсь, вот эту портянку Вы видели? Там далеко не всё безобидно:

D:\GoogleD\Soft\led_matrix_Font\led_matrix_Font.ino:87:0: warning: "COLOR_DEBTH" redefined
 #define COLOR_DEBTH 1  // цветовая глубина: 1, 2, 3 (в байтах)
 
In file included from D:\GoogleD\Soft\led_matrix_Font\led_matrix_Font.ino:2:0:
d:\GoogleD\Soft\libraries\microLED-main\src/microLED.h:37:0: note: this is the location of the previous definition
 #define COLOR_DEBTH 3    // по умолчанию 24 бита
 
D:\GoogleD\Soft\led_matrix_Font\led_matrix_Font.ino: In function 'byte getPixel(uint8_t, byte, uint32_t)':
D:\GoogleD\Soft\led_matrix_Font\led_matrix_Font.ino:169:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
D:\GoogleD\Soft\led_matrix_Font\led_matrix_Font.ino: In function 'void showText(String, byte, byte, uint32_t)':
D:\GoogleD\Soft\led_matrix_Font\led_matrix_Font.ino:182:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (i = 0; i < text.length(); i++) {
               ~~^~~~~~~~~~~~~~~

Ну, давайте разбираться. Вот какие объекты у Вас есть (я тут кое-что опустил, но это мелочь, как видите объём памяти почти совпал)

Карта памяти
Объект Размер
leds 768
strip_12 295
strip_11 295
strip_20 295
strip_13 295
strip_9 295
strip_10 295
strip_7 295
strip_8 295
strip_5 295
strip_6 295
strip_3 295
strip_4 295
strip_1 295
strip_2 295
strip_17 295
strip_19 295
strip_15 295
strip_18 295
strip_14 295
strip_16 295
Serial 157
_ZN14SoftwareSerial15_receive_bufferE 64
myDFPlayer 42
twi_txBuffer 32
twi_rxBuffer 32
twi_masterBuffer 32
mySerial 31
_ZTV14HardwareSerial 18
_ZTV14SoftwareSerial 18
_ZTV7WS2812BILh44EL6EOrder66EE 18
_ZTV19ClocklessControllerILh44ELi4ELi10ELi6EL6EOrder66ELi0ELb0ELi10EE 18
_ZZN8CFastLED7addLedsI7WS2812BLh44EL6EOrder66EEER14CLEDControllerP4CRGBiiE1c 17
_ZTV14CLEDController 16
FastLED 13
_ZGVZN8CFastLED7addLedsI7WS2812BLh44EL6EOrder66EEER14CLEDControllerP4CRGBiiE1c 8
_ZL10fontNumStr 6
timer0_overflow_count 4
timer0_millis 4
twi_timeout_us 4
myTimer1 4
_ZL8lastshow 4
_ZZN8CFastLED8countFPSEiE9lastframe 4
_ZN14CLEDController7m_pHeadE 2
_ZN14SoftwareSerial13active_objectE 2
taimer 2
point 2
_ZZN8CFastLED8countFPSEiE2br 2
state 2
_ZN14CLEDController7m_pTailE 2
__malloc_heap_start 2
__brkval 2
__malloc_heap_end 2
__flp 2
__malloc_margin 2
_ZN14SoftwareSerial20_receive_buffer_headE 1
_ZN14SoftwareSerial20_receive_buffer_tailE 1
twi_txBufferLength 1
twi_state 1
_ZN7TwoWire13rxBufferIndexE 1
_ZZN15PixelControllerIL6EOrder66ELi1ELm4294967295EE21init_binary_ditheringEvE1R 1
_ZL21gTimeErrorAccum256ths 1
curX 1
curY 1
twi_do_reset_on_timeout 1
twi_timed_out_flag 1
twi_sendStop 1
twi_inRepStart 1
_ZZN6StringixEjE19dummy_writable_char 1
clear_c 1
sa0 1
sa1 1
sa2 1
sa3 1
sa4 1
sa5 1
sa6 1
sa7 1
sa8 1
sa9 1
sa10 1
sa11 1
sa12 1
sa13 1
sa14 1
sa15 1
sa16 1
sa17 1
sa18 1
sa19 1
sa20 1
sa21 1
sa22 1
sa23 1
timer0_fract 1
find 1
twi_error 1
twi_rxBufferIndex 1
twi_txBufferIndex 1
twi_slarw 1
twi_masterBufferIndex 1
twi_masterBufferLength 1
Итого: 7285

Как видите, львиную долю памяти (5 900 байтов) отжирают объекты strip_xx. Ещё 768 байтов ест объект leds.

Я не очень глубоко вникал в код, но по тому, что вник, у меня создалось впечатление, что Вы можете (теоретически) на каждом шаге рисования отрисовать все strip_xx с нуля. А это значит, что Вам не нужно их хранить между рисованиями. В этом случае Вам не нужны буферы под каждый strip_xx, достаточно одного буфера на всех.

Если это действительно так (Вы можете нарисовать с нуля и Вам не надо помнить старый буфер), то проблему можно решить. Но, разумеется, это потребует серьёзной переработки кода.

1 лайк

Что, правда?
А, может, Вы просто слушать не умеете?
Мне привести номера сообщений, в которых были вполне дельные замечания и предложения?

Вот поэтому пути пойду, что получилось отпишусь. Спасибо большое за обратный ответ, благодарю ещё раз)

На всякий случай еще раз посоветую вести таблицу учета расхода памяти, чтобы было видно результаты действий оптимизации.
Например сейчас у вас
#define COLOR_DEBTH 1
стоит после подключения библиотеки, и не оказывает влияния.