Hi, irgendwie ist heut nicht mein Tag: Ich will ein Menu auf einen Display anzeigen lassen mit lcd_string(menu[1], 1); funktionierts. uint8_t x = 1; lcd_string(menu[x], 1); geht nicht, er zeigt nur wirre Zeichen an !? menu[] ist mit PROGMEM im Programmspeicher definiert const char text1[] PROGMEM = "Test1 "; const char text2[] PROGMEM = "Test2 "; const char text3[] PROGMEM = "Test3 "; const char text4[] PROGMEM = "Test4 "; PGM_P menu[4] PROGMEM = { text1, text2, text3, text4 }; hat jemand sowas schonmal erlebt oder ne Idee, Interrupts sind auch aus. mfg Thorsten
Was passiert bei int x = 1; lcd_string(menu[x], 1); Vielleicht hat der verwendete Compiler Probleme mit dem Casting von uint8_t nach int? Wie ist die Struktur PGM_P definiert? Eventuell liegt ja auch darin ein Problem ...
Das ganze ist mit avr-gcc version 3.4.1 und der avr-libc 1.0.4-1 Auf einem avr AtMega16. uint8_t ist unsigned char Funktioniert aber auch nicht mir char oder int. PGM_P ist: const char *
Da Du unbedingt auch die Zeigertabelle selbst (menu[]) in den ROM legen musstest (warum eigentlich? das sind ganze 8 Bytes RAM, die Du damit einsparst), musst Du deren Inhalt natürlich auch mit pgm_read_word() extrahieren (und danach trotzdem noch strcpy_P() oder sowas für den eigentlichen String nehmen, schließlich liegt der ja auch noch im ROM). Für den Fall mit dem konstanten Index funktioniert es nur zufällig, weil der Compiler die Dereferenzierung der Tabelle dann bereits zur Compile-Zeit macht.
Danke, jetzt klappts, Hab gestern noch 3 Stunden gesucht, aber das hab ich immer übersehen. Ist auch das erste mal das ich was aus dem Rom lese. Hab zum Schluss soger noch den Controller und das Display gewechselt, war echt am verzweifeln. Aber der Fehler saß wie fast immer 30cm vor dem Rechner. vielen Dank! Thorsten
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.