Hallo, ich bin relativ neu in der Welt von ATMEL und arbeite zum ersten mal mit AVR 5. Wie auch immer :) Ich kann leider mein Programm nicht richtig testen, da AVR 5 nicht auf die Breakpoints, die ich setze, springt. Wenn ich ein Breakpoint setze und es debugge, greift er auf ein "Programm" zu, das nur Register beinhaltet und kommt gar nicht auf das Programm rein, das ich geschrieben habe. Ich verstehe aber nicht ganz warum. Die Breakpoints, die ich da rein setze, auf die springt er, aber er kommt irgendwie nicht in das Programm rein, wo es hin soll. Ich wäre über jede Hilfe dankbar, da ich schon seit Tagen da rumspiele, aber zu keinem Ergebnis komme und es macht mich langsam wahnsinnig. Vielen Dank und einen schönen Tag
Mahlzeit, Merve Bulut schrieb: > Wie auch immer :) Merve Bulut schrieb: > Ich verstehe aber nicht ganz warum. und wir nicht was du willst. Sag mal was du machst. C,Assembler,Jtag,Simulator usw. MfG
Tut mir Leid :) also ich programmiere in C und mit dem JTAG (also nicht Simulator). Und ja AVR Studio 5 (ich soll das mit dem machen, weil es mein Prof. gesagt hat ) Also ich soll ein Programm erweitern. Diese hat keine main. Wurde mit den sogenannten APPs geschrieben. Wie gesagt, wenn ich Breakpoints setze im Programm, geht er auf eine Seite (Disassembly) und greift nicht auf mein Programm zu. Ich drück dann auf F10, der geht zwar Schritt für Schritt, aber er ist hartnäckig darin nicht auf mein Programm überzugehen. Ich hoffe, dass ihr ungefähr eine Vorstellung habt, was mein Problem ist. Danke
C und kein main is irgendwie ein KO-Kriterium, ein wunder dass da irgendwas kompiliert, und das was du in den uC lädst ist vermutlich kein Executable sondern einfach ein paar zusammengewürfelte Funktionen.. Poste mal den Code oder lad am besten das ganze Projekt als Zip hoch dann kann dir vl. wer helfen.. aber warum nicht einfach den Professor fragen? APPs sagen mir in Zusammenhang mit Atmel gar nix, meinst du vl. APIs?
API .. application programming interface und bedeutet im wesentlichen Programmierschnittstelle. Hat jetzt mit dem Programm an sich und dem Debuggen wenig zu tun Die int main() Funktion eines C-Programms ist der Einsprungpunkt, da fängt der Prozessor beim Einschalten (=Spannungsversorgung) an - salopp gesagt. Fehlt die main, fängt der Prozessor einfach bei dem befehl auf Adresse 0x0000 an, und das ist vermutlich das was du jetzt im Disassembly siehst. Kann man sich alles in List- und Mapfiles anschaun, denke das ist für dich aber jetzt zum Anfange etwas zu viel - Tatsache ist, ohne main() geht nix, da läuft der Prozessor irgendwo im Gemüse herum aber sicher nicht in deinem Programm, das evtl. zwar irgendwo im Speicher liegt, aber nicht erreicht wird, daher auch kein Debuggen ;)
Das Problem ist, dass sich in AVR5 mein Prof sich nicht so genau auskennt und derjenige der das Programm geschrieben hat (also es war seine Bachelor-Arbeit) ist nicht mehr da. Das Programm von ihm an sich funktioniert einwandfrei, bloß wenn ich dann Breakpoints setze gehts nicht. Ich darf leider nicht das ganze Projekt hochladen, aber ich schicke mal Teile aus dem Programm. Ich hoffe, ihr versteht das und wirklich danke, dass ihr mir helfen wollt. Bin gerade wirklich in der Zwickmühle. So genug geredet, schicke mal Teile vom Programm. Anbei ist auch ein Screenshot, wenn ich versuche zu debuggen. Danke
Und wie kommt es, dass sein Programm ohne main() funktioniert? Ich habe mich auch gewundert, aber er hat wirklich keine main(). Sagen wir mal, es liegt daran, dass es keine main() hat. Wie kann ich dann das Problem lösen?
Sicher dass nicht in irgendeiner der anderen Sourcedateien eine Main ist? Du kannst im Disassembly schaun was an der Adresse 0x2A2 ist, das ist der erste Befehl des main... wenn da nix steht hast du ein Problem. Was natürlich sein kann ist auf dem Board ein Bootloader oder ähnliches läuft? Darfst du List- und Mapfile hochladen? Zur Erklärung: Der Prozessor startet - wie erwähnt - immer an Adresse 0, dort steht ein Jump auf 0x2A2, dort sollte also deine Main sein - der GCC kompiliert C-Dateien immer so, dass er auf Adresse 0 den Jump auf den ersten Befehl der main setzt. - Alternativ dazu kann er irgendwo in die Bootloader-Section springen, das wären dann allerdings wesentlich höhere Adressbereiche. Ohne Main ginge z.b. auch noch - was ich aber nicht glaube - wenn Assembler und C-Part irgendwie gemischt wären, oder die "Main" schon fix am Prozessor ist und über GCC-Option ein Offset für das ganze C-Programm angegeben wird.. Musstest du das "Erase before Program" Häckchen entfernen? Das könnte erklären warums beim Debuggen nicht funktioniert, weil du dann den schon im prozessor befindlichen Programmteil überschrieben hättest. Diesen Absatz halte ich allerdings für ein eher utopisches Szenario.. Ich kann dir leider ohne das komplette Projekt nicht wirklich helfen, das ist Fischen in trübem Gewässer ohne Angel ;)
Thomas Bergmüller schrieb: > der > GCC kompiliert C-Dateien immer so, dass er auf Adresse 0 den Jump auf > den ersten Befehl der main setzt. das galube ich nicht. Vor der Main gibt auch auch schon code - da werden globale variabeln initalisiert. Main kommt erst danach.
Nabend, ohne main() geht es nicht. Durchsuche mal die Dateien im Projektordner, mit Windows Boardmitteln, auf die Zeichenkette "main". Wenn diese nicht zu finden ist hast du wohl nur Fragmente und kein Projekt bekommen. Ohne main() kann der Linker kein auf den Target ladbares Image erzeugen (sollte eine Fehlermeldung geben). Das was du API nennst ist ein header. MfG
Peter II schrieb: > das galube ich nicht. Vor der Main gibt auch auch schon code - da werden > globale variabeln initalisiert. Main kommt erst danach. Stimmt natürlich..
Nabend, nennt sich StartUp Code, der die Voraussetzungen für die CRTL (C- Laufzeitbibliothek) schafft. Eventuell hat er was Sonderbares geerbt, oder versucht ein Programm für #42 auf einem AVR zum Laufen zu bringen :-) MfG
Vielen Dank. Ich werde morgen früh, wenn ich wieder im Labor bin, danach suchen. Ich hoffe ich werde fündig und ich werde auch morgen fragen, ob ich die List- und Mapfile hochladen darf. Ich habe schon das ganze Projekt bekommen, bloß von einer main() habe ich eigentlich nichts gesehen. Ich hab auch danach gefragt, aber mir wurde gesagt, dass es keine main() gibt. Vielleicht habe ich das auch falsch verstanden. Ich weiß gar nicht, was ich mir dabei gedacht habe, eine Studienarbeit anzunehmen, in der ich so gut wie Null Erfahrung habe. Ich dachte, es würde ja schon gehen. Ist ja nur ein kleiner Teil, den man programmieren muss, aber dass es so ausartet hätte ich nicht gedacht. Jetzt ist es zu spät, meine Arbeit wurde schon angemeldet :( Wirklich vielen Dank, dass ihr mir versucht zu helfen. Ich hoffe, ich bekomme das irgendwie hin. Schönen Abend
Naja - mal ganz naiv gedacht ... Vielleicht hat man dir den Programmcode als "Bibliothek" mit bestimmten Funktionen gegeben und erwartet von dir dass du den Programmablauf (=> main()) erst implementierst? Sprich man hat dir Programmteile gegeben aber kein lauffähiges Programm?
Nein, ist schon ein "fast fertiges" Programm. Meine Aufgabe besteht darin, das ganze zu "automatisieren". Im Moment muss man die Taster betätigen, dass da irgendwas läuft. Ich muss das ganze so programmieren, dass man keine Taster mehr betätigen muss (außer für den Start/Stopp). Ich werde später Signale empfangen, die auswerten und jenachdem soll dann das Programm ablaufen. Ich habe noch einmal geschaut im Projekt, aber da ist wirklich keine main() drin. :(
Also ich habe nochmal gefragt, wie das sein kann ohne main(). Mir wurde gesagt, dass es über Tasks läuft. Es wurde so konfiguriert, dass man keine main() braucht. Das Problem dabei ist, dass es keine StartUp Datei gibt. Somit seh ich nicht, bzw. weiß ich nicht, wo er dann startet (LEIDER). Ich habe die MAP-Datei gefunden, werde sie hochladen, aber irgendwie existiert keine List-Datei, was ich auch ziehmlich seltsam finde...
Dann kann sich das Ding aber auch nicht übersetzen lassen... Kopier mal den Output des Übersetzungsvorganges (Rebuild) hoch, das ist der der im breiten Fenster unten (Console) angezeigt wird. Aber mal ganz ehrlich, wo bzw. was studierst du, dass dir Professoren bei solchen einfachen Problemen nicht weiterhelfen können? Was Richtung Elektronik / Informatik kanns nicht sein, zumindest nix wo ab und zu mal was programmiert wird im Regelfall, oder?
Danke. Ich studiere Mechatronik mit dem Schwerpunkt Automatisierungstechnik. Bisschen was habe ich schon damit zu tun, aber ist ziemlich selten. Jetzt wollt ich was in der Richtung machen, weil es mich eigentlich interessiert, aber ich hätte vielleicht besser in meinem Gebiet bleiben sollen :)
Mahlzeit. Es gibt den StartUp Code. Ist im Mapfile unter Sektion .init 0-9 gut zu erkennen. Die main steckt in der libBcAll.a, wenn du die Quellen der lib nicht hast ist diese unzugänglich. Du solltest dir also die Doku zu den Bibliotheken besorgen, sonst stocherst du Weinachten noch im dunklen :-) MfG
Guten morgen, @Sauger Ich habe libBcAll.a gefunden. Darin ist eine main.o - Datei. Was anderes mit main habe ich nicht gefunden. Ich habe nur nicht ganz verstanden, was ich damit anfangen soll. Ich habe versucht es zu öffnen, aber viel hat es mir nicht gebracht. Ich weiß, ich fange bestimmt an zu nerven, aber außer vom Forum bekomme ich keine Hilfestellung. Es tut mir wirklich Leid. Schönen Tag
Merve Bulut schrieb: > derjenige der das Programm geschrieben hat (also es war > seine Bachelor-Arbeit) ist nicht mehr da. Wenn es eine Bachelor-Arbeit ist, dann muß ja zu dem Programm eine ausführliche Beschreibung existieren, es sei denn, er hat nicht bestanden. Aus der Beschreibung sollte hervorgehen, wie die Funktionen aufgerufen werden. Einfach durch Hinschreiben wird eine Funktion jedenfalls nicht ausgeführt, sie ist nur toter Code. Peter
Morgen, ich habe das Programm auf einem anderen Rechner mit AVR 4 gestartet(ursprünglich wurde es damit geschrieben). Da ging es dann plötzlich. Also Breakpoint gesetzt, debuggen und dann auf "RUN", aber an was es jetzt gescheitert ist, kann ich euch nicht sagen. Es war ein bisschen Glück. Vielen Dank an alle!!!
War vermutlich ursprünglich ein AVR Studio 4 Projekt und du hast es in das Fünfer importiert bzw. konvertiert oder? Eventuell ist das was passiert dann...
Sauger schrieb: > Nabend, > > > > ohne main() geht es nicht. Durchsuche mal die Dateien im Projektordner, > > mit Windows Boardmitteln, auf die Zeichenkette "main". Wenn diese nicht > > zu finden ist hast du wohl nur Fragmente und kein Projekt bekommen. > > > > Ohne main() kann der Linker kein auf den Target ladbares Image erzeugen > > (sollte eine Fehlermeldung geben). > > > > Das was du API nennst ist ein header. > > > > MfG Das ist falsch. Typischweise läuft vor einer "main" die crt0, in der gewisse Teile der Hardware initialisiert werden, und die dann zur "main" springt. Die "main" muss aber nicht so heissen. Dem gcc ist das vollkommen egal. Und ein Programm fängt auch nicht immer bei Adresse 0 an zu laufen, das ist bei anderen Prozesoren auch anders. Ein MPC565 startet beispielsweise typischweise bei 0x100. Das wird über die Linker-Description-Files gesteuert, und die Adresse ist beliebig wählbar.
Wenn man den MPC565 verwendet arbeitet man aber üblicherweise nicht mit dem Atmel Studio oder?
Thomas Bergmüller schrieb: > Wenn man den MPC565 verwendet arbeitet man aber üblicherweise nicht mit dem Atmel Studio oder? Natürlich nicht, wo habe ich das behauptet? Das war nur ein Gegenbeispiel zu "Der Code startet immer bei 0x0000".
@Thomas Bergmüller Ja hab ich auch zuerst gedacht, aber anscheinend hat mein Rechner ein Problem mit AVR 4. Also wenn ich (und meine Vorgänger) gedebuggt (keine Ahnung, ob man das so nennt :D ) haben, dann ist das ganze Programm abgestürzt. Auf den anderen Rechnern ging es komischerweiße aber. Deswegen wollte mein Prof. , dass ich es mit AVR 5 mache, damit ich "keine Probleme" bekomme. Habe dann alles schön konvertiert, ging aber auch nicht. Was mir aufgefallen ist, dass ich kein "RUN" bei AVR 5 gefunden habe (bei AVR 4 gab es ein extra Button für RUN). Vielleicht liegt es daran, was ich aber persönlich nicht denke. Heute hab ich mal den ganzen Rechner platt gemacht und neuinstalliert, in der Hoffnung, dass es diesmal geht. War aber umsonst. Ich weiß leider nicht, was für ein Problem mein Rechner hat. Warum der jetzt so zickt. Sobald ich weiß, was da los ist, werde ich es hier posten. Vielleicht bringt es irgendjemandem mal was. Ich denke, das ist auch ganz interessant zu wissen, an was es jetzt lag :) Schönen Abend euch noch
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.