www.mikrocontroller.net

Forum: Compiler & IDEs EEMEM bei GCC 20070525


Autor: Peter (Gast)
Datum:

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

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Passendes #include vergessen.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab ich in main.c drinnen

#include <avr/eeprom.h>

Autor: Johannes M. (johnny-m)
Datum:

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

Autor: Peter (Gast)
Datum:

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

Autor: Andreas K. (a-k)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

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

Autor: Oliver (Gast)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

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

Autor: Peter (Gast)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BTW: Was steht in Zeile 45 von main()?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Johannes
#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  "global.h"
#include  "rtr3.h"
#include  "i2c.h"
#include  "ds1307.h"
#include  "lcd.h"
#include  "rprintf.h"
#include  "modbus.h"
#include  "timer128.h"

//-----------------------------------------------------------------------
// EEPROM
//-----------------------------------------------------------------------

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.

Autor: Peter (Gast)
Datum:

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

Trotzdem Danke für die Hilfe

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.