Hallo, ich habe mein Programm bisher in AVR Assembler entwickelt. Nun möchte ich Programmteile in C schreiben und in mein Programm einbinden. Wie mache ich das am besten? Ich möchte dabei nicht die C Dateien seperat in Assembler kompilieren und dann den erzeugten Code mit meinem mischen per Copy-Paste oder so. Geht das auch irgendwie automatisiert? Ich arbeite mit dem AVR-Studio. Vielen Dank, Anna
Lagere Teile deines Programmes in C aus, übersetze das ganze (Teile in C, teile in Assembler) und linke den binärcode zusammen. Müsste mit einigen Scripts zu schaffen sein. Gruß Andreas
Oder schreib an den Stellen wo du dein ASM code haben willst Inline Assembler in C, das wäre noch das geschickteste denk ich.
Hallo Wenn es nicht allusehr an die Grenzen der Leistung geht, dann würde ich das Programm komplett nach C umschreiben. Das ist bei einem bestehenden Assemblerprogramm keine allzugrosse Sache. Besonders kritische Teile kannst du ja dann immer noch inline in Assembler schreiben. Gruss Michael
Hallo, Danke für Eure Antworten! Das Problem ist, dass mein Programm schon ziemlich groß ist und ich es zeitlich nicht schaffen werde, alles in C umzuschreiben. Das habe ich schon versucht. Mit Inline Assembler kann ich ja auch nur einzelne Zeilen schreiben, aber ja kein komplettes Programm! Dafür ist das zu groß. @Andreas: Hast du Erfahrung damit, Assemblercode zusammen zu linken? Kann ich dann aus meinem Assembler Code ganz einfach die C Funktionen aufrufen? Wie kann ich von Assembler her auf meine C Programme zugreifen?
Ich habe schlechte Erfahrung gemacht, große Assemblertexte und C zu kombinieren, es ist ne Sackgasse. Assemblerprogramme sind nämlich in der Regel nicht so geschrieben, daß sie mit den Aufrufkonventionen von C zurechtkommen und enthalten oft auch nicht die nötigen Linkersteueranweisungen und reservieren nicht die von C verwendeten Register. Sie sind ausgesprochen C-unverträglich geschrieben. Wenn Du den Assemblertext selber geschrieben hast, sollten auch größere Texte schnell umzuschreiben sein. Sind es fremde Quellen, wirds haarig, da sollte man besser auch den Rest in Assembler schreiben. Um mit C anzufangen eignen sich besser neue Projekte und keine alten Assemblerprojekte. Peter
@Peter: Danke für diese Info. Ich habe mein Assemblerprogramm bisher selbst geschrieben. Nun möchte ich beginnen, eine SD Karte über mein Programm anzusprechen und dachte mir, dass es in C evtl. übersichtlicher ist und einfacher. Ich wollte mein bisheriges Programm dafür allerdings nicht komplett neu in C umschreiben. Ich denke, nach all diesen Meinungen werde ich wohl doch bei Assembler bleiben!
Hi nochmal, @anna: Code zu linken, habe ich ERfahrung, aber nicht auf Atmelplattformen. Auch Funktionen in Assemblercode lassen sich aus C aufrufen (um sicherzustellen, dass die Funktion richtig benutzt wird, schreibt man letztendlich auch die Headerfiles mit den Funktionsdeklarationen) Das Prinzip ist das aber immer gleich: Dein GccCompiler übersetzt dein C-Programm in "linkercode" (eigentlich eher ein Zwischencode für den Linker) Dein AVR Assembler wird ebenfalls übersetzt in "linkercode" (assembliert). Der Linker geht jetzt her, packt alles in eine Datei und löst die relativen Sprungadressen auf (z.B. Funktionsaufrufe für C-Funktionen die in anderen Dateien stehen, also separat übersetzt werden.) Dann rechnet er realtive in absolute Adressen um (abhängig von der Plattform) Voraussetzung dafür, dass der Linker mit dem Code umgehen kann: beide (AVRStudio und avr-gcc) müssen das gleiche Linkerformat erzeugen, was sie IMHO aber auch tun, weil man mit AVRStudio auch Avr-gcc erzeugten code debuggen kann. (Ich glaube beide benutzen das ELF-Format, bin mir aber nicht sicher.) Gruß Andreas
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.