Warum ist das hier für den gcc nicht const?

Gast #177735
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
Angehängte Dateien:
Gast #177736
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.
Gast #177737
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.
Angehängte Dateien:
Gast #177738
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

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