Forum: Compiler & IDEs Problem mit x = 1


von Thorsten Stoffregen (Gast)


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

von Rufus T. Firefly (Gast)


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 ...

von Thorsten Stoffregen (Gast)


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 *

von Rufus T. Firefly (Gast)


Lesenswert?

Das ist seltsam.
Mal in 'nem Debugger angesehen?

von Jörg Wunsch (Gast)


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.

von Thorsten Stoffregen (Gast)


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

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
Noch kein Account? Hier anmelden.