www.mikrocontroller.net

Forum: Compiler & IDEs Probleme mit makefiles


Autor: Tobi (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Tobi (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Tobi (Gast)
Datum:
Angehängte Dateien:

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

Autor: Tobi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist die asuro.h

Autor: Tobi (Gast)
Datum:
Angehängte Dateien:

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

Autor: Tobi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So und jetzt unser allseits beliebtes makefile :-)

Autor: Tobi (Gast)
Datum:

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

Autor: Stefan Kleinwort (Gast)
Datum:

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

Autor: Hegy (Gast)
Datum:

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

Autor: Tobi (Gast)
Datum:

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

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

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

Autor: Tobi (Gast)
Datum:

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

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

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

Autor: Peter (Gast)
Datum:

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

Autor: Tobi (Gast)
Datum:

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

Autor: Stefan Kleinwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AVR-Studio ist kostenlos, gibt es auf www.atmel.com

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


Gruß, Stefan

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tobi

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

http://www.atmel.com/dyn/products/tools_card.asp?t...

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

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.