Problem mit x = 1

Gast #178835
Lesenswert?

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
Gast #178836
Lesenswert?

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 ...
Gast #178837
Lesenswert?

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 *
Gast #178839
Lesenswert?

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.
Gast #178840
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren