www.mikrocontroller.net

Forum: Compiler & IDEs Problem mit x = 1


Autor: Thorsten Stoffregen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Thorsten Stoffregen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 *

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist seltsam.
Mal in 'nem Debugger angesehen?

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thorsten Stoffregen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.