mikrocontroller.net

Forum: Compiler & IDEs Makefile und Unterverzeichnisse


Autor: Christoph Daun (Gast)
Datum:
Angehängte Dateien:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Autor: Christoph Daun (Gast)
Datum:
Angehängte Dateien:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christoph Daun wrote:

> SRC += ./OS/main.c
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'.

Autor: Christoph Daun (Gast)
Datum:

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

Autor: Wolfram (Gast)
Datum:

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

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.