Hallo zusammen, bisher sah meine Funktion für ein LC - Display wie folgt
aus:
void lcd_zeichen(uint8_t cumba, uint16_t x, uint16_t y, uint16_t
farbe_schrift,uint16_t farbe_back)
{
uint16_t zeichen,xsize,ysize,offset,temp,i,j;
xsize=pgm_read_byte(&kleine_Schrift[0]); //Daten aus dem Flash lesen
ysize=pgm_read_byte(&kleine_Schrift[1]);
offset=pgm_read_byte(&kleine_Schrift[2]);
...}
und hat das dann auch auf dem Display ausgegeben. Nun habe ich weiter
Fonts erstellt--> const uint8_t grosse Schrift[]PROGMEM={..};
ich bekomme es nicht auf die Reihe beim Funktionsaufruf dem zu sagen
welche Array er nun verwenden soll. Also das in der Funktion statt dem
xsize=pgm_read_byte(&kleine_Schrift[0]);
dann
xsize=pgm_read_byte(&grosse_Schrift[0]);
aufgerufen wird
Mehr erfahren schrieb:> ich bekomme es nicht auf die Reihe beim Funktionsaufruf dem zu sagen> welche Array er nun verwenden soll.
Was genau ist denn das Problem? Welche Fehlermeldung gibt es? Welches
Fehlerverhalten?
Prinzipiell brauchst du einfach nur ein weiteres Argument, welches du
aber nicht aber mittels "call-by-value" übergibst, sondern per
"call-by-reference" (d.h. als Pointer). Siehe dazu auch:
http://www.eskimo.com/~scs/cclass/notes/sx10f.html
Mit freundlichen Grüßen,
Karol Babioch
@ Mehr erfahren (Gast)
>ich bekomme es nicht auf die Reihe beim Funktionsaufruf dem zu sagen>welche Array er nun verwenden soll. Also das in der Funktion statt dem
Wo ist das Problem?
@Mehr erfahren (Gast)
>muss dem doch nur irgendwie sagen, dass er die Daten jetzt aus der>anderen Adresse, nämlich der großen Schrift holen soll :/.
Das machst du doch, indem du den Pointer auf den jeweiligen Schriftsatz
übergibst.
lcd_zeichen('O',50,100,&SmallFont[0],RED,WHITE);
lcd_zeichen('A',140,100,&BigFont[0],BLUE,WHITE);
Übrigend reicht es so.
lcd_zeichen('O',50,100, SmallFont,RED,WHITE);
lcd_zeichen('A',140,100, BigFont,BLUE,WHITE);
Den der Name eines Arrays ohne Index ist gleichzeitig ein Pointer auf
diesen.
aber noch so ne Frage.
Ich hab gelesen, dass wenn ich vor eine Variable ein & setze also z.b
int *a,b;
b=&a; dann speichert es in b die Adresse von a.
was aber wenn der speicher in b für die Adresse nicht reicht?
also wenn beide z.B nur uint8_t wären aber die Adresse von a viel größer
? :/
Mehr erfahren schrieb:> aber noch so ne Frage.> Ich hab gelesen, dass wenn ich vor eine Variable ein & setze also z.b> int *a,b;>> b=&a; dann speichert es in b die Adresse von a.> was aber wenn der speicher in b für die Adresse nicht reicht?> also wenn beide z.B nur uint8_t wären aber die Adresse von a viel größer> ? :/
Wenn Du einen 16- oder 32-Bit-Wert in einem 8-Bit-Wert abspeichern
willst, dann gehen Daten verloren. Wo sollen sie auch hin? ;-)