Hallo, Vielleicht kann mir jemand weiterhelfen. Ich benutze derzeit den IAR AVR compiler. Nun würde ich gerne auf den GCC umsteigen. Bzw. jederzeit zwischen beiden wechseln können. Derzeit habe ich folgende Probleme: 1. Mein Sourcode ist in mehrere Domains aufgeteilt: Source -->ChassInf/CHASSINF.c -->ECU/Adc.c /AnalogSwitch.c /ECU/ECU.c /Ports.c /Spi.c /Timer.c -->FaultMan/FaultMan.c /MonitorStatus.c -->InfoBase/InfoBase.c -->IPC/IPC.c -->NVMEM/NVMEM.c -->OS/OS.c /main.c -->SandA/ERD.c /Motor.c /SandA.c /Switch.c 2. Weiterhin befinden sich in der domain OS noch Assembler Dateien die auch zum Quellcode gehoeren. 3. main() befindet sich in der main.c. Die main.c ist aber nicht die Datei die als erstes ausgefuehrt wird. Sondern dies ist die Startup.asm! Fragen: Kann ich dies ohne weiteres compilieren? Oder müssen alle Source Dateien in einem Ordner liegen? Was mache ich falsch? Ich erhalte momentan den Fehler: -------- begin -------- avr-gcc (GCC) 3.4.6 Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Compiling C: OS/main.c avr-gcc -c -mmcu=atmega128 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char - funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wunde f -Wa,-adhlns=/OS/main.lst -std=gnu99 -Wundef -MD -MP -MF .dep/main.o.d OS/main .c -o /OS/main.o OS/main.c:117: warning: return type of 'main' is not `int' Assembler messages: FATAL: can't create /OS/main.o: No such file or directory
> Was mache ich falsch?
Du versuchst, deine Sourcedateien mit absoluten Pfadnamen anzugeben,
die Suche beginnt also in der Wurzel des Dateisystems statt im
aktuellen Verzeichnis. Dort wird diese Datei dann nicht gefunden.
Hallo, und vielen Dank für die Antwort. Ich habe das Makefile jetzt geändert: # List C source files here. (C dependencies are automatically generated.) SRC += ./OS/main.c SRC += ./Chassinf/chassinf.c SRC += ./ECU/Adc.c SRC += ./ECU/AnalogSwitch.c SRC += ./ECU/ECU.c SRC += ./ECU/Ports.c SRC += ./ECU/Timer.c SRC += ./FaultMan/FaultMan.c SRC += ./FaultMan/MonitorStatus.c SRC += ./InfoBase/InfoBase.c SRC += ./IPC/IPC.c SRC += ./NVMEM/NVMEM.c SRC += ./OS/main.c SRC += ./OS/OS.c SRC += ./ERD/ERD.c SRC += ./ERD/Motor.c SRC += ./ERD/SandA.c SRC += ./ERD/Switch.c Die Datei make.exe befindet sich wie oben beschrieben im Ordner Source. Jetzt erhalte ich folgende Fehlermeldung: . . . . . storage class ./OS/..\ECU\/..\ECU\/..\ECU\iom88.h:173: error: syntax error before "DDRB" ./OS/..\ECU\/..\ECU\/..\ECU\iom88.h:173: warning: type defaults to `int' in decl aration of `DDRB' ./OS/..\ECU\/..\ECU\/..\ECU\iom88.h:173: warning: data definition has no type or storage class ./OS/..\ECU\/..\ECU\/..\ECU\iom88.h:174: error: syntax error before "PINB" ./OS/..\ECU\/..\ECU\/..\ECU\iom88.h:174: warning: type defaults to `int' in decl aration of `PINB' ./OS/..\ECU\/..\ECU\/..\ECU\iom88.h:174: warning: data definition has no type or storage class ./OS/main.c:121: warning: return type of 'main' is not `int' make: *** [/./OS/main.o] Error 1
Christoph Daun wrote:
> SRC += ./OS/main.c
1 | SRC += OS/main.c |
hätte es sicher auch getan. > storage class > ./OS/..\ECU\/..\ECU\/..\ECU\iom88.h:173: error: syntax error before > "DDRB" Sieht so aus, als hättest du einige grundlegende Dinge hier daneben geschrieben. Das kannst du aber nur durch Review deines Sourcecodes lösen. Vermutung: hast du <avr/iom88.h> statt <avr/io.h> included? > ./OS/main.c:121: warning: return type of 'main' is not `int' Entsprechend dem C-Standard hat main() den Rückkehrwert `int'.
Ich vermute gerade , dass es bei IAR Unterschiede in der iom88.h gibt.
Wahrscheinlich sind bestimmte libaries auch anders.
Also der von mir programmierte code läuft unter IAR einwandfrei. Wobei
ich darauf geachtet habe, nur Standard C code zu verwenden.
>>Vermutung: hast du <avr/iom88.h> statt <avr/io.h> included?
Warum sollte ich denn nur die io.h includieren und nicht die iom88.h?
>Also der von mir programmierte code läuft unter IAR einwandfrei. Wobei >ich darauf geachtet habe, nur Standard C code zu verwenden. Eine Headerdatei die die Prozessorperipherieregister oder Interrupts beschreibt ist mit 99% Sicherheit Compilerspezifisch. >Warum sollte ich denn nur die io.h includieren und nicht die iom88.h? Das findest du raus wenn du die avrlibc Dokumentation liest, die ist Pflichtlektüre.
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.