Makefile und Unterverzeichnisse

Gast #428053
Lesenswert?
• ▲
▼
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
Angehängte Dateien:
Gast #428175
Lesenswert?
• ▲
▼
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
Angehängte Dateien:
Moderator Persönliche Seite #428285
Lesenswert?
• ▲
▼
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'.
Gast #428641
Lesenswert?
• ▲
▼
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?
Gast #428804
Lesenswert?
• ▲
▼
>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.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.