Hy versuche heute meinen Butterfly bzgl. des Display zu nutzen und habe nutze eine fertige Funktion zum schreiben des LCD. Funktioniert so weit auch alles wunderbar aber ich kann keine Paramter übergeben!! Er holt ja die "Daten" aus dem Flash aber wieso kann ich n nicht mit übergeben?? das klappt: char MenuItem1[] PROGMEM= "Rot"; char MenuItem2[] PROGMEM= "Gruen"; char MenuItem3[] PROGMEM= "Blau"; char* MenuItemPointers[] PROGMEM= {MenuItem1, MenuItem2, MenuItem3}; .... LCD_puts_f(MenuItemPointers[2]); das hier nicht: !!! char MenuItem1[] PROGMEM= "Rot"; char MenuItem2[] PROGMEM= "Gruen"; char MenuItem3[] PROGMEM= "Blau"; char* MenuItemPointers[] PROGMEM= {MenuItem1, MenuItem2, MenuItem3}; .... n=2 LCD_puts_f(MenuItemPointers[1]); hier die Funktion: void LCD_puts_f(const char *FlashData) { strcpy_P((char*)&TextBuffer[0], FlashData); LCD_puts((char*)&TextBuffer[0]); }
Jörn Ahrens wrote: > char* MenuItemPointers[] PROGMEM= {MenuItem1, MenuItem2, MenuItem3}; > .... > LCD_puts_f(MenuItemPointers[2]); Wenn dies funktioniert, dann eher zufällig, denn MenuItemPointers liegt im Flash aber der Zugriff auf MenuItemPointers[2] holt den Pointer aus dem RAM. Besser: LCD_puts_f(pgm_read_word(&MenuItemPointers[2]));
Jörn Ahrens wrote: > auch alles wunderbar aber ich kann keine Paramter übergeben!! Er holt ja > die "Daten" aus dem Flash aber wieso kann ich n nicht mit übergeben?? Wozu willst du's mit übergeben? > das hier nicht: !!! > > char MenuItem1[] PROGMEM= "Rot"; > char MenuItem2[] PROGMEM= "Gruen"; > char MenuItem3[] PROGMEM= "Blau"; > char* MenuItemPointers[] PROGMEM= {MenuItem1, MenuItem2, MenuItem3}; > .... > n=2 > LCD_puts_f(MenuItemPointers[1]); LCD_puts_f(MenuItemPointers[n]);
also ich glaube das ganze Zusammenwirken von RAM<->FLASH erschließt sich mir noch nicht so ganz. Zur Zeit möchte ich damit eigentlich nur die Menues anzeigen. mit dem Joystick Druck gehe ich durch die Menüs... hab zur Zeit das ganze durch switch(n) gelöst aber das ist ja etwas umständlich.
Jörn Ahrens wrote: > also ich glaube das ganze Zusammenwirken von RAM<->FLASH erschließt sich > mir noch nicht so ganz. Ich glaub eher, du hast noch Probleme mit Arrays. MenuItemPointers ist ein Array von Pointern, wobei jeder Pointer auf einen Text zeigt. Wenn du den 0-ten Text ausgeben lassen willst, dann musst du logischerweise auch den 0-Eintrag aus dem Pointer Array nehmen. Willst du den 2-ten Text ausgeben, dann musst du logischerweise auch den 2-ten Eintrag aus dem Pointer Array nehmen. Willst du allgemein den n-ten Text ausgeben, dann musst du halt den n-ten Pointer aus dem Array nehmen. Daher:
1 | LCD_puts_f( pgm_read_word( &MenuItemPointers[n] ) ); |
Hy das mit den Arrays war nicht das Problem sondern das "pgm_read_word" fehlte.... (besten Dank, kannste ich noch nicht) Ich habe denn Array ja gerade eingeführt, um den n-ten Wert, der den Pointer auf den String hat, zu nutzen aber da ich ohne PGM auf irgendwas zugriffen hatte war ich verwundert...
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.