Forum: Mikrocontroller und Digitale Elektronik C und Assembler Dateien in AVR-Studio einbinden


von Anna F. (Gast)


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

von Baitronic (Gast)


Lesenswert?

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

von Läubi (Gast)


Lesenswert?

Oder schreib an den Stellen wo du dein ASM code haben willst Inline
Assembler in C, das wäre noch das geschickteste denk ich.

von mr.chip (Gast)


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

von Anna (Gast)


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?

von peter dannegger (Gast)


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

von Anna (Gast)


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!

von Baitronic (Gast)


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

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
Noch kein Account? Hier anmelden.