Hallo! Ich spiele hier gerade mit einem Grafikdisplay und probiere gerade aus mit der pgmspace.h zwei verschiedene bilder in den flash zu schreiben. Aber aus irgend einem Grund wird mir immer nur das erste bild ausgegeben. Warum? Ich habs schonmal probiert das erste bild im programm auszukommentieren und nur das zweite zu brennen aber es kommt immer nur das erste bild. Ausschnitt: const prog_uint8_t bild [] = {0x00,0x02,0x03........}; const prog_uint8_t bild_2 [] = {0x04,0x05,0x06.........}; GLCD_Write_String2(bild_2,0x0C00); _delay_ms(5000); GLCD_Display_Clear(0x0C00,graphic_mode,0xff); _delay_ms(5000); GLCD_Write_String2(bild,0x0C00); void GLCD_Write(prog_uint8_t *string, uint16_t ram_adr) { GLCD_Write_Data(ram_adr & 0xFF); GLCD_Write_Data(ram_adr >> 8); GLCD_Write_Command(0x24); for(uint16_t i=0; pgm_read_byte_near(&bild[i]) != 2560; i++) { //string[i]-=0x20; GLCD_Write_Data(pgm_read_byte(&bild[i])); GLCD_Write_Command(0xC0); if(i>=2560) break; } }
Solange du hier
1 | for(uint16_t i=0; pgm_read_byte_near(&bild[i]) != 2560; i++) |
direkt auf bild zugreifst und nicht den übergebenen Pointer benutzt, wird sich das auch nicht ändern :-) Hier nochmal
1 | GLCD_Write_Data(pgm_read_byte(&bild[i])); |
? pgm_read_byte_near(&bild[i]) != 2560 wie kann ein Byte den Wert 2560 haben?
? Was'n das? if(i>=2560) break; Schreib doch erst mal die Funktion ordentlich. So richtig mit Einrückungen, einer sauberen Struktur und allem drum und drann. Dann hast du auch nicht so blödsinnige Fehler. Und da in einem Bild wohl so ziemlich alle Bytewerte vorkommen werden, wird es eine gute Idee sein, wenn der Aufrufer der Funktion die Bildgröße bekannt gibt, weil die Funktion die selber nicht ermitteln kann.
Es sind 2560 Bytes 20x128 Bytes = 2560 Bytes (Horizontal 8bits) Dislplay 160x128 pixel
Eugen L. schrieb: > Es sind 2560 Bytes 20x128 Bytes = 2560 Bytes (Horizontal 8bits) > Dislplay 160x128 pixel Mag alles sein. Wenn der Aufrufer der Funktion das weiß, ist das in Ordnung. Aber die Funktion soll dann doch ja wohl jede beliebige Bildgröße ausgeben können. Von daher hat diese Zahl in der Funktion nix verloren. Genau dafür gibt es Funktionsargumente, damit ein Aufrufer einer Funktion die Funktion mit 'Wissen' versorgen kann.
Vielen Dank! Es läuft jetzt endlich. Ich werde aber eure tipps befolgen und es ordentlicher schreiben, damit ich das nächste mal selbst den fehler sehen kann. Danke Karl Heinz Buchegger!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.