Forum: Compiler & IDEs EEMEM bei GCC 20070525


von Peter (Gast)


Lesenswert?

Hallo und gleich mal Hilfe!!!

Beim umschreiben des Sourccode von einer alten auf die neue GCC-Version 
hab ich folgendes Problem:

Im main.c hab ich den Speicherplatz im EEPROM vereinbart

u08  ee_osccal   EEMEM    = 0x00;

Um nun die Variable ee_osccal auch in einer andere Source nutzen zu 
können, hab ich im zugeordneten rtr3.h-File folgende externe 
Vereinbarung reingeschrieben

extern  u08  ee_osccal  EEMEM  = 0x00;

Bei compilieren kommen dann folgende Fehler:

Compiling: main.c
avr-gcc -c -mmcu=atmega128 -I. -g -O0 -funsigned-char 
-funsigned-bitfields -fpack-struct -fshort-enums -Wall 
-Wstrict-prototypes -Wa,-adhlns=main.lst  -std=gnu99 main.c -o main.o
In file included from main.c:31:
rtr3.h:15: error: parse error before "ee_osccal"
rtr3.h:15: warning: type defaults to `int' in declaration of `EEMEM'
rtr3.h:15: warning: data definition has no type or storage class
main.c:45: error: parse error before "EEMEM"
main.c:45: warning: type defaults to `int' in declaration of `EEMEM'
main.c:45: warning: data definition has no type or storage class
make: *** [main.o] Error 1

Was mach ich hier falsch? Hab auch schon andere Foren durchsucht, aber 
keine Antwort bekommen.

Bitte um Hilfe - Danke
Peter

von Andreas K. (a-k)


Lesenswert?

Passendes #include vergessen.

von Peter (Gast)


Lesenswert?

hab ich in main.c drinnen

#include <avr/eeprom.h>

von Johannes M. (johnny-m)


Lesenswert?

Peter wrote:
> hab ich in main.c drinnen
>
> #include <avr/eeprom.h>
Und die eeprom.h wird im main.c auch vor der rtr3.h includiert?

von Peter (Gast)


Lesenswert?

ja - hier der Anfang von main.c


#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <inttypes.h>

#include  "rtr3.h"
#include  "global.h"
#include  "i2c.h"
#include  "ds1307.h"
#include  "lcd.h"
#include  "rprintf.h"
#include  "modbus.h"
#include  "timer128.h"

von Andreas K. (a-k)


Lesenswert?

Dann übersetze das File mit -E und such im Ergebnis davon (dem Output 
des Präprozessors) diese Zeile. Meist ist dann deutlicher, was schief 
läuft.

Könnte auch sein, das u08 nicht davor definiert wird.

von Johannes M. (johnny-m)


Lesenswert?

Und wo ist u08 definiert? Das ist nämlich kein Standard-Typ! Und die 
erste Fehlermeldung bezieht sich schließlich auf einen Parse-Error vor 
ee_osccal

von Oliver (Gast)


Lesenswert?

Ist u08 dort auch schon bekannt?
Ausserdem darf in der extern-Deklaration die Variable nicht nochmals 
initialisiert werden. Das "=0x00" muß da weg.

Oliver

von Johannes M. (johnny-m)


Lesenswert?

Oliver wrote:
> Ausserdem darf in der extern-Deklaration die Variable nicht nochmals
> initialisiert werden. Das "=0x00" muß da weg.
Da haste allerdings recht!

@Peter:
Erkundige Dich mal über den Unterschied zwischen Deklaration und 
Definition!

von Peter (Gast)


Lesenswert?

@Oliver:
Das "=0x00" muß da weg.

ist eh nicht drinnen - > kopierfehler von mir beim erstellen der 
Beitrags.

uint8_t bringt auch keine Änderung - gleichen Meldungen wie vorher!

von Johannes M. (johnny-m)


Lesenswert?

Und der #include-Block steht genau so in Deinem Programm, wie Du ihn 
oben angegeben hast?

von Johannes M. (johnny-m)


Lesenswert?

BTW: Was steht in Zeile 45 von main()?

von Peter (Gast)


Lesenswert?

Hallo Johannes
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <avr/pgmspace.h>
4
#include <avr/eeprom.h>
5
#include <stdio.h>
6
#include <stdlib.h>
7
#include <string.h>
8
#include <inttypes.h>
9
10
#include  "global.h"
11
#include  "rtr3.h"
12
#include  "i2c.h"
13
#include  "ds1307.h"
14
#include  "lcd.h"
15
#include  "rprintf.h"
16
#include  "modbus.h"
17
#include  "timer128.h"
18
19
//-----------------------------------------------------------------------
20
// EEPROM
21
//-----------------------------------------------------------------------
22
23
u08    ee_osccal     EEMEM    = 0x00;      // Oszillator
In der zwischenzeit hab ich "global.h" vor "rtr3.h" gesetzt, da dort die 
defs für die Datentypen hinterlegt sind.
Vor Zeile 45 gibt es nur wie oben zu sehen die Include-Files.

von Peter (Gast)


Lesenswert?

... hat sich von selbst erledigt.
AVRGCC-Version 20071221 geht ohne Probleme. Dürfte ein Compilerfehler 
gewesen sein.

Trotzdem Danke für die Hilfe

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.