www.mikrocontroller.net

Forum: Compiler & IDEs Warum ist das hier für den gcc nicht const?


Autor: Marcus M. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

nahcdem ich nun einige Zeit mit dem Menu rumexperimentiert habe,
verzweile ich im Moment etwas am gcc - oder an mir.

Wieso ist bei dem beigefügten Code diese Fehlermeldung sinnvoll?
IMHO ist das alles doch const.

Code im Anhang!

Compiling: menu_neu.c
avr-gcc -c -mmcu=atmega16 -I. -g   -Os -funsigned-char
-funsigned-bitfields -fpack-struct -fshort-enums -Wall
-Wstrict-prototypes -Wa,-adhlns=menu_neu.lst  -std=gnu99
-Wp,-M,-MP,-MT,menu_neu.o,-MF,.dep/menu_neu.o.d -g menu_neu.c -o
menu_neu.o
menu_neu.c:45: error: initializer element is not constant
menu_neu.c:45: error: (near initialization for `menus[0]')
menu_neu.c:46: error: initializer element is not constant
menu_neu.c:46: error: (near initialization for `menus[1]')
menu_neu.c:47: error: initializer element is not constant
menu_neu.c:47: error: (near initialization for `menus[2]')
menu_neu.c:48: error: initializer element is not constant
menu_neu.c:48: error: (near initialization for `menus[3]')
menu_neu.c:49: error: initializer element is not constant
menu_neu.c:49: error: (near initialization for `menus[4]')
menu_neu.c:50: error: initializer element is not constant
menu_neu.c:50: error: (near initialization for `menus[5]')
menu_neu.c:51: error: initializer element is not constant
menu_neu.c:51: error: (near initialization for `menus[6]')
menu_neu.c:52: error: initializer element is not constant
menu_neu.c:52: error: (near initialization for `menus[7]')
menu_neu.c:53: error: initializer element is not constant
menu_neu.c:53: error: (near initialization for `menus[8]')
menu_neu.c:54: error: initializer element is not constant
menu_neu.c:54: error: (near initialization for `menus[9]')
menu_neu.c:55: error: initializer element is not constant
menu_neu.c:55: error: (near initialization for `menus[10]')
menu_neu.c:56: error: initializer element is not constant
menu_neu.c:56: error: (near initialization for `menus[11]')
menu_neu.c:58: error: initializer element is not constant
menu_neu.c:58: error: (near initialization for `menus[12]')
make.exe: *** [menu_neu.o] Error 1

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil die Deklarationen der referenzierten Objekte (Hauptmenue etc.)
nur in einem Kommentar stehen.

Außerdem ist Dein menuename[] Array so nicht sehr sinnvoll: Du hast
das Array selbst im Progmem, die Strings, die drinstehen aber nicht.
Siehe (avr-libc) FAQ.

Autor: Marcus M. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

erstmal Danke für den Tip mit den Strings, hatte da wohl eine
Kleinigkeit vergessen.

Selbst wenn ich folgendes in das Headerfile schreibe und somit die
Deklaration in einem abhacke, passsiert das gleiche, wie oben. Dem gcc
ist das immer noch nicht const genug - und ich verzweifel!!

Gruß Marcus

PS: Liegt dieses Menü wirklich im Flash? Ich bin mir da nicht soo
sicher.

Autor: Volkmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marcus,

Ich weiß nicht, ob es damit zusammenhängt, aber brauchst Du denn
'const static ...' oder reicht auch 'const ...' alleine aus? (Ich
kann mir das mit dem static einfach nicht merken)

Ja, das array menuname liegt wirklich im flash. Aber nur das array mit
den pointern zu den Strings. Die Strings selber liegen im RAM. Siehe
FAQ.

Volkmar

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.