C und Assembler Dateien in AVR-Studio einbinden

Gast #317958
Lesenswert?

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
Gast #317961
Lesenswert?

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
Gast #317962
Lesenswert?

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?
Gast #317963
Lesenswert?

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
Gast #317964
Lesenswert?

@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!
Gast #317965
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren