Forum: Compiler & IDEs Probleme mit makefiles


von Tobi (Gast)


Lesenswert?

Hi @ all,

 Letztens einen Roboter(Asuro vom DLR) gekauft, den man in C
programmieren kann.

Ich will jetzt aber, wenn ich in C ein Programm schreibe, erstmal das
Programm in einem Mikrocontroller-Simulator am PC testen bevor ich es
auf den Mikrocontroller flashe.

Als Simulations-Programm hab ich das AVR-Studio, als Compiler benutze
ich den GCC und Entwicklungsumgebung ist bei mir das Programmers
Notepad.

Jetzt mein Probleme:
1.Wenn ich Programme(die 100%ig richtig sind) übersetzten lassen will
bringt er mir eine Fehlermeldung und zwar "undefinded reference of
main".

Ich denk mir mal, dass liegt einfach daran, dass das makefile nicht
richtig eingestellt ist und der Linker die Datei "main" nicht
einbindet.


Jetzt meine Frage: Hat jemand von euch (verständliche) Unterlagen oder
Tipps , wie man ein makefile richtig einstellt?

Oder hat auch irgendjemand von euch (verständliche) Unterlagen zum
Thema "C-Compiler für Mikrocontroller", damit ich mir mal einen
besseren Überblick darüber verschaffen kann, was da beim Compilieren
genau abgeht.


Gruss Tobi

von Karl H. (kbuchegg)


Lesenswert?

undefined reference of main

bedeutet ganz einfach, dass der Linker beim Zusammenbau
des fertigen Programmes keine Funktion main() vorgefunden
hat. Die braucht er aber, da dies die erste Funktion
ist, die vom Programm ausgefuehrt wird.
Die musst Du schreiben.

Zeig doch mal Dein makefile
und die zugehoerigen Source Code Dateien.

von Tobi (Gast)


Lesenswert?

Hi,

danke für die schnelle Antwort.


Aber wenn ich ein Programm schreibe, dann ist doch immer dort die main
drin.

Z.B. Mein Programm ist immer die test.c (weil das makefile nur auf
test.c eingestellt ist) und dieses test.c hat oben ein #include
"asuro.h".

Anmerkung: In asuro.c stehen die ganzen Funktionen z.B für die LED´s,
für einlesen von Sensoren, Motoransteuerung usw...

In asuro.h stehen die Funktionsdefinitionen.

Und mein Programm(test.c) greift immer auf die vorgefertigten
Funktionen von asuro.c und asuro.h zu.

Beispiel:


#include "asuro.h


main()

{

Init();

while(1);

}


Aber ich kann  auch morgen die original C-Dateien + makefile hier im
Forum bereitlegen, falls die Informationen von oben zu dürftig waren.

Gruss Tobi

von Karl H. (kbuchegg)


Lesenswert?

Das ist zu duerftig :-)

Irgendwo ist ein Fehler. Wenn Du eine main Funktion hast,
dann kann es hoechstens nur noch sein, dass bei den
Linker Angaben irgendetwas nicht stimmt. Also im makefile.
Genaueres kann man aber erst sagen, wenn wir das Teil
mal zu Gesicht bekommen.

von Tobi (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

ich hab jetzt hier mal die asuro.c angehängt (Da ich nicht weiss, wie
man in diesem Forum mehrere Dateien in einen Beitrag anhängt, tu ich
die restlichen Dateien in den nächsten Beiträgen anhängen

von Tobi (Gast)


Angehängte Dateien:

Lesenswert?

Hier ist die asuro.h

von Tobi (Gast)


Angehängte Dateien:

Lesenswert?

Und hier ist die test.c (die ich geschrieben habe)

Ich hab jetzt einfach mal in die test.c so wenig wie möglich
geschrieben, damit ersichtlich ist, dass die gar nicht falsch sein
kann.

von Tobi (Gast)


Angehängte Dateien:

Lesenswert?

So und jetzt unser allseits beliebtes makefile :-)

von Tobi (Gast)


Lesenswert?

Noch was: Ich hätte ganz gerne, dass im makefile eingestellt ist, dass
beim Compilieren der Compiler auch eine debug-Datei erzeugt, die
brauch ich dann nämlich für das AVR Studio, wenn ich dann das
C-Programm auf meiner virtuellen MCU ablaufen lassen will.(Ich glaub
die debug-Datei hat die Endung .cof oder .d90, aber ich bin mir nicht
ganz sicher.

Hättest du eine Ahnung, wie ich das anstelle.

Vielen dank schon mal im Voraus

von Stefan Kleinwort (Gast)


Lesenswert?

Hi Tobi,

wie rufst Du das make auf?
Hast Du alles (test.c, asuro.c/h, makefile) in einem dir? Rufst Du make
aus diesem Verzeichnis aus auf?

Wie sieht die komplette Fehlermeldung aus?

Das makefile sieht eigendlich ok aus ....

Ich könnte mir vorstellen, dass er in einem ganz anderen dir
compilieren will und Deinen Source nicht findet.

Gruß, Stefan

von Hegy (Gast)


Lesenswert?

Ola,

da hast du eine Panne im make-Aufruf, hab mir gerade "mal eben
schnell" die Files gezogen und make drueberherknattern lassen. Geht
doch.
Kommt auch was bei rum:

asuro.c  asuro.h    asuro.o   test.c  test.eep  test.hex  test.lst
test.o
asuro.d  asuro.lst  makefile  test.d  test.elf  test.lss  test.map

von Tobi (Gast)


Lesenswert?

Hi ,

@Stefan Kleinwort

>> wie rufst Du das make auf?
>> Hast Du alles (test.c, asuro.c/h, makefile) in einem dir?

Ja, ich hab die test.c, asuro.c/h und makefile in einem Verzeichnis
bzw. Ordner.


>>Rufst Du make aus diesem Verzeichnis aus auf?

Als ich den GCC-Compiler incl. Programmers Notepad installiert habe
musste man zweimal Pfadangaben machen, wo das Verzeichnis und Ordner
liegt, in dem die .C,H. und makefile liegen ( einmal oben mit "make"
und einmal mit "clean".


@Hegy

Hallo, könntest du mir vielleicht auch einen Tipp geben, wie ich im
makefile noch einstelle, dass der Compiler mir auch ne debug datei
rauswirft, die brauch ich für das AVR Studio zum MCU simulieren.
Danke.


Gruss Tobi

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> Hallo, könntest du mir vielleicht auch einen Tipp geben, wie ich im
> makefile noch einstelle, dass der Compiler mir auch ne debug datei
> rauswirft, die brauch ich für das AVR Studio zum MCU simulieren.

Sollte er doch eigentlich standardmäßig tun.  AVR Studio nimmt die
normale ELF-Datei, du musst allerdings DWARF-2 als debugging format
eingestellt haben (-gdwarf-2).

von Tobi (Gast)


Lesenswert?

Hallo Jörg,

oben hab ich die makefile-Datei mit angehängt, könntest du mir sagen,
wo ich dieses "(-gdwarf-2)" darin einstellen muss?

Cool, wusste gar nicht, dass das AVR Studio die .elf datei brauch, ich
war immer der Meinung er brauch zum simulieren eine .cof Datei.
Muss ich heut abend mal ausprobieren (Wenn ich bis dahin das problem
mit dem GCC-Compiler in den Griff bekommen habe :-)   )

Gruss Tobi

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> oben hab ich die makefile-Datei mit angehängt, könntest du mir
> sagen, wo ich dieses "(-gdwarf-2)" darin einstellen muss?

Statt des -g in CFLAGS.

> Cool, wusste gar nicht, dass das AVR Studio die .elf datei brauch,

Ich hoffe, deine AVR-Studio-Version ist neuer als das
Makefile-Template, das du genommen hast...  Die neueren Templates
haben -gdwarf-2 meiner Meinung nach bereits drin.

von Peter (Gast)


Lesenswert?

Hallo Tobi

Welche Version von AVR-Studio verwendest Du? Wenn Du die aktuelle
Version 4.12 hast, Dann kanst du direkt im AVR-Studio ein AVR-GCC
Projekt eröffnen und Deine Source-Dateien reinsaugen!

Mit dem im AvrStudio enthaltenem AVR-GCC Plugin kannst Du super bequem
alle Projekt-Einstellungen vornehmen und direkt vom AvrStudio aus
drauflos programmieren, compilieren und debuggen! Das AVR-GCC Plugin
kreiert das erforderlche Makefile, normalerweise hast Du damit nichts
mehr zu tun...

MfG  Peter

von Tobi (Gast)


Lesenswert?

Hallo Peter,

ich hab die Version 4 vom AVR Studio. Meinst du, dass auch damit geht?

Wenn nein, wo krieg ich dann eine neuere Version her, würde das dann
Geld kosten? (Meine aktuelles AVR-Studio war nämlich bei der Software
zum Roboter dabei):


ciao Tobi

von Stefan Kleinwort (Gast)


Lesenswert?

AVR-Studio ist kostenlos, gibt es auf www.atmel.com

Version 4.wieviel?
Unter help/about findest Du die genaue Versionsnummer.


Gruß, Stefan

von Peter (Gast)


Lesenswert?

Hallo Tobi

Falls nicht schon selbst gefunden, hier der exakte Link zu AvrStudio.

http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725

AVR-GCC Support hat aber bloss die neuste Version AvrStudio 4.12!
WinAvr (=kompletes AVR-GCC Package für Win32, ebenfalls gratis) ist
nichr mit dabei, dies sollte vorgängig installiert werden!

MfG Peter

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
Noch kein Account? Hier anmelden.