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
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?
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"
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.
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
Ist u08 dort auch schon bekannt? Ausserdem darf in der extern-Deklaration die Variable nicht nochmals initialisiert werden. Das "=0x00" muß da weg. Oliver
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!
@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!
Und der #include-Block steht genau so in Deinem Programm, wie Du ihn oben angegeben hast?
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.
... 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.