Ich programmiere einen Atmel AT90PWM3 mit dem Atmel AVR Studio Version 4.12 und dem GCC Compiler. Ich habe schon ein Programm geschrieben, da hat alles prima funktioniert. Wenn ich jedoch ein Neues Programm durch das Programm jage, bekomme ich immer eine Fehlermeldung: gcc plug-in: Error: Object file not found on expected location C:\...\Eigene Dateien\Neu_TxD\default\Neu_TxD.elf Die entsprechende Datei ist auch nicht vorhanden. Compellieren lassen sich die entsprechenden Programme jedoch fehlerlos. Woran liegt es dass der Compiler diese .elf Datei nich tmehr erzeugt?? Vielen Dank Matthias
Wie meinst du das? ICh habe doch extra einen Unterstrich benutzt. Ich habe schon 2 Programme im gleichen Ordner, die auch einen Unterstrich im Namen haben
Das bringt keinen Durchbruch, es kommt immer noch der gleiche Fehler.
Gibt es eine ausführlichere Fehlermeldung? Was steht im Makefile bzw. in den vom Makefile aufgerufenen Makerules? Hast du schon Echo-Ausgaben vor die Toolaufrufe ins Makefile eingefügt, um Kommandozeilen mitzubekommen? Hast du schon verbose Ausgaben der Tools angeschaltet, um Include- und Library-Pfade mitzubekommen? Hast du schon einen Filemonitor (z.B. FILEMON von www.sysinternals.com) eingesetzt, um Dateizugriffe generell zu protokollieren?
Habe genau dasselbe Problem, manchmal kommt diese Fehlermeldung die ich dann nicht mehr weg bekomme, muss dan jedesmal nen neuens Projekt anlegen. Vorher haben 20 oder mehr Compilerläufe einwandfrei funktioniert.
Hi da draußen, hatte den Fehler auch schon oft. 'Mal war er dann wieder weg und dann 'mal wieder da. Vor 1 Stunde kam er wieder. Nun habe ich folgendes gemacht: Ich habe die Änderungen im source rückgängig gemacht, und siehe da, gcc compilierte ohne Fehlermeldung. Die Fehlermeldung wird also durch einen Fehler im Quellcode ausgelöst !!! Ich hab's dann auch schnell gefunden: Ich habe in einem file "code_1.c" und einem file "code_2.c" eine function definiert mit dem gleichen Namen und in "code_2.h" bekannt gegeben. Nach Umbenennen einer der beiden functions compilierte gcc wieder ohne die Fehlermeldung. Viel Erfolg Otto
Danke guter Tip, kann den Fehler so auch nachstellen und beheben. Ist ja dann wohl nen größerer Bug.
Es ist eher kein "Bug". Es ist eher ein Problem, dass die Linker Errors (doppeltes Symbol gefunden) nicht an die IDE durchgereicht werden bzw. dass dem Linker nachfolgende Tools trotz Linker Error aufgerufen werden. Das ist eher eine Sache wie man das Makefile aufbaut.
Danke erst mal für die vielen Verbesserungsvorschläge. Bekomme mein Programmm trotzdem nicht zum laufen. Wie gesagt compellieren lässt es sich problemlos. Das Problem mit gleich benamten Funktionen ist es bei mir wohl nicht. Ich muss dazu dagen, dass ich Neueinsteiger was Atmels betrifft bin. Ich hab mal mein Programm angehängt.
Ich hab das Problem weiter eingrenzen können. Mein Programm besteht aus mehreren Programmen. Wenn ich die anderen Dateien nicht einbinde mit: #include<"Usart_init.c"> #include<"put_s.c"> sondern einfach gar nicht, dann funktioniert es. Beim debuggen sieht man dass er trotzdem ganz brav in die verschiedenen Dateien springt. Muss man die Dateien nicht einbinden, oder mach ich es einfach falsch?
Ich kenne eigentlich nur #include <xy.h> für die systemdateien oder #include "myconfig.h" für meine eigenen Include-Dateien. Vielleicht liegts daran.
Daß 'make' weiterläuft, obwohl ein Fehler in einem Target aufgetreten ist, könnte daran liegen, daß 'make' mit dem Parameter '-k' aufgerufen wird... Prüft das mal in euren Einstellungen zum make-Aufruf.
Im Klartext, heißt das?: Die Programme, die von zB Main aufgerufen werden nicht im Main Programm einbinden brauche. Hab ich das richtig verstanden?
Wenn du die *.c Dateien mit #include einbindest wird der Dateiinhalt an dieser Stelle eingefügt. Wenn dann die betreffende Datei nochmal compiliert und gelinkt wird, dann ist der Funktionsname auf einmal doppelt vorhanden. Kann also der o.g. Linkerfehler sein. Gruss
Zu dem Beitrag oben: Normalerweise verwendet man dazu Header-Dateien, die nur einen Funktionsprototyp enthalten. Sonst kann der Compiler die Funktion gar nicht finden und meckert. Der Inhalt der Datei put_s.h wäre dann: void put_s(char *s); und in main.c oder anderswo, wo die Fkt. put_s() verwendet wird: #include "put_s.h"
Das heißt, in der put_s,h steht dann nur: void put_s(char *s); Die Datei put_s.c brauch ich dann weiterhin, nur dass die put_s.h zB in main eingebunden wird, wie du oben beschrieben hast. Du sagst, eigentlich, verursache ich wenn ichs nicht mache ernsthafte Probleme? Durch den Compiler gings ja durch.
Vielleicht solltest Du erst einmal C-Programmierung auf einem PC lernen ehe Du mit µC anfängst. Nicht nur Deine includes sind falsch. Dein Programm wird auch nicht 123 ausgeben, falls Du das erwarten sollst. Dein put_s erwartet einen Zeiger auf Character und keinen char-Wert.
Da magst du Recht haben. Ich habe jedoch schon C Programme programmiert, allerdings sind meine Kenntnisse schon ziemlich eingrostet. Einen Text zu senden würde ich hinbekommen: char text[] = "BlaBla"; int main() { Usart_init(); put_s (text); } müsste ja dann funktionieren. Allerdings will ich einen 4 stelligen Zahlenwert, der sich auch ändert senden. Kannst du mir da einen Tipp geben? Wär dir sehr dankbar.
Schau Dir die zur Verfügung stehenden Bibliotheken an. In diesem Fall die avr-libc. itoa ist die Funktion, die Du suchst. Oder sprintf falls das zur Verfügung steht.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.