Forum: Compiler & IDEs struct


von Jack (Gast)


Lesenswert?

hallo,
benötige hilfe bei einem struct im eeprom vom mega16

  //EEPROM-Daten definieren
#define eeprom_data  _attribute_ ((section(".eeprom")))
 struct
 {
   menue1
   menue2
   menue3
 }eeprom_menue   eeprom_data;

wie ist es nun möglich werte dem struct zu übergeben,
die von anfang an im eeprom liegen (initialisierung des eeprom)
werte stehen im xxx.eep

  gruss
   jack

von Jörg Wunsch (Gast)


Lesenswert?

struct { ... } eeprom_menu eeprom_data = { 1, 2, 3 };

GCC versteht C99, Du kannst also auch sowas wie

... = { .menue1 = ... , .menue3 = ... };

schreiben.

von Matthias (Gast)


Lesenswert?

Hi

muß dem GCC aber auch mitteilen das er C99 verstehen soll.

Matthias

von Jörg Wunsch (Gast)


Lesenswert?

Nö, gnu99 (C99 + GNU-Erweiterungen) ist der Default.  Es ist sowohl
der Default von GCC selbst (falls kein -std= angegeben ist) als auch
die Voreinstellung des WinAVR-Makefile-Templates und damit auch von
Mfile.

Zu bemerken wäre noch, daß GCC den C99-Standard noch nicht vollständig
implementiert, dazu gibt's auf der GCC-Webseite irgendwo einen
Bericht
über den aktuellen Stand.  Dürfte aber im AVR-Umfeld (oder überhaupt
im Microcontroller-Bereich) eher uninteressant sein.

von Jörg Wunsch (Gast)


Lesenswert?

Hmm, laut man page wäre -std=gnu89 der Default.

Allerdings:

$ cat foo.c
struct {
        int i;
        const char *cp;
} foobar = {
        .i = 42,
};
$ avr-gcc -Wall -O -S foo.c
$

Ich denke, daß eher die man page falsch ist als meine Behauptung. ;-)

von Matthias (Gast)


Lesenswert?

Hi

meine Info hatte ich aus der man-page. Und diese stimmt zumindest
teilweise da der gcc

for(int foo=0;foo<100;foo++) bar;

ohne -std=c99 nicht schluckt.

Matthias

von Jörg Wunsch (Gast)


Lesenswert?

Das ist in der Tat eigenwillig, ja.  Dort beklagt er sich ausdrücklich
über den fehlenden C99-Modus...  Ah ja, benannte struct-
Initialisierung kann er (seltsamerweise) auch im C89-Modus.  Lediglich
mit -pedantic bemerkt er:

foo.c:5: warning: ISO C90 forbids specifying subobject to initialize

von Jack (Gast)


Lesenswert?

guten morgen an alle,
danke für die hilfe
  gruss
   jack

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.