Gast
#4662424
Hallo Leute,
ich hänge an einem Speicherproblem und finde nicht den richtigen Anfang.
Es ist ein ATmega2560, der soll zwei Bilder auf einem TFT ausgeben.
Die Daten selber sind im Flash, sollten also zur Laufzeit keinen Platz
belegen, richtig ?
Unten der Quelltext. Daten werden mit pgm_read gelesen und auf das
Sisplay ausgegeben.
Mit 3 Bildern funktioniert die Sace super, aber sobald das vierte
dazukommt, werden die Bilder wild durcheinander angezeit.
Nach der Anzeige läuft das Program normal weiter, als ob nix passiert
wäre.
Ich habe gehofft das die Daten nur zur Laufzeit aus dem Flash geladen
und nach der Anzeige wieder gelöscht werden, also keinen RAM belegen.
Daten:
const uint16_t data_original_bmp1[] PROGMEM=
{
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
.......
}
Auslesen und weitergeben:
a=0;
while (a<9600)
{
pushcolour(pgm_read_word(&data_original_bmp2[a]));
a++;
}
Ausgabe zum Display:
//set colour for drawing
void pushcolour(uint16_t colour)
{
writedata8(colour>>8);
writedata8(colour);
}
Speicherbelegung:
Program Memory Usage : 155066 bytes 59,2 % Full
Data Memory Usage : 2770 bytes 4,3 % Full
EEPROM Memory Usage : 2475 bytes 60,4 % Full
