Probleme mit makefiles

Gast #284519
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
#284520
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.
Gast #284521
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
#284522
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.
Gast #284527
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
Gast #284528
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
Gast #284529
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
Gast #284530
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
Moderator Persönliche Seite #284531
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).
Gast #284532
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
Moderator Persönliche Seite #284533
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.
Gast #284534
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
Gast #284535
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.