Hallo,
ich habe es nach mehreren kleineren Projekten scheinbar nun zum ersten Mal mit Speicherproblemen zu tun.
In dem mir vorliegenden Projekt verwende ich viele byte_Arrays wie z.B. dieses:
byte melody_05[] = {
0x00, 0x90, 0x2b,
0x81, 0x79, 0x80, 0x2b,
0x81, 0x09, 0x90, 0x2b,
0x83, 0x0f, 0x90, 0x2e,
0x2a, 0x80, 0x2b,
0x81, 0x41, 0x80, 0x2e,
0x81, 0x1d, 0x90, 0x2e,
0x82, 0x78, 0x90, 0x33,
0x39, 0x80, 0x2e,
0x81, 0x37, 0x80, 0x33,
0x81, 0x23, 0x90, 0x33,
0x82, 0x79, 0x90, 0x2e,
0x2b, 0x80, 0x33,
0x81, 0x31, 0x90, 0x30,
0x2a, 0x80, 0x2e,
0x83, 0x0f, 0x80, 0x30,
0x4e, 0x90, 0x2b,
0x81, 0x79, 0x80, 0x2b,
0x81, 0x09, 0x90, 0x2b,
0x83, 0x0f, 0x90, 0x2e,
0x2a, 0x80, 0x2b,
0x81, 0x41, 0x80, 0x2e,
0x81, 0x1d, 0x90, 0x2e,
0x82, 0x78, 0x90, 0x33,
0x39, 0x80, 0x2e,
0x81, 0x37, 0x80, 0x33,
0x81, 0x23, 0x90, 0x33,
0x82, 0x79, 0x90, 0x2e,
0x1b, 0x80, 0x33,
0x81, 0x41, 0x90, 0x30,
0x2a, 0x80, 0x2e,
0x83, 0x0f, 0x80, 0x30,
0x28, 0xff };
Die einzelnen Arrays werden von mir bei Bedarf folgendermaßen "ausgelesen":
byte* melody[] = {
melody_00, melody_01, melody_02, melody_03, melody_04, melody_05, melody_06, melody_07 };
index_value = melody[current_melody][read_index];
Dies klappte bisher soweit hervorragend.
Nun kam es jedoch beim Hinzufügen eines weiteren Arrays zu Problemen. Und zwar funktioniert der komplette Sketch im Anschluss überhaupt nicht mehr.
Entferne (oder verkleinere) ich das zuletzt hinzugefügte Array, funktioniert alles wieder bestens.
An der Gesamtgröße des Sketches kann es nicht liegen, da:
Binäre Sketchgröße: 13.322 Bytes (von einem Maximum von 30.720 Bytes)
Ich habe mich zwar schon an PROGMEM versucht, aber dann funktioniert der Sketch ebenfalls umgehend nicht und dies auch unabhängig davon, ob ich das o.a. Array hinzugefügt habe, oder nicht. Hierzu bin ich wie folgt vorgegangen:
- Bibliothek hinzugefügt:
#include <avr/pgmspace.h>
- Vor jedes Array ein PROGMEM geschrieben:
PROGMEM byte melody_03[]= {
0x00, 0x90, 0x2b,
0x81, 0x3e, 0x90, 0x37,
0x32, 0x80, 0x2b,
0x0, 0x80, 0x37,
0x20, 0xff };
Ich verwende u.a. die TimerOne_Library und habe auch schon versucht das "Abfrageintervall" zu vergrößern. Dies hatte jedoch in diesem Zusammenhang keine Auswirkungen auf die Lauffähigkeit des Sketches.
Außerdem versuchte ich durch Angabe der Indexanzahl der Arrays das Problem zu beheben- ebenfalls ohne Erfolg. :~
Ich verwende ein Arduino Pro mini.
Nun weiss ich leider nicht mehr, wo ich ansetzten soll/ kann.
Gruß Chris