www.mikrocontroller.net

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


Autor: Anna F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Baitronic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: mr.chip (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Anna (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Anna (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Baitronic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.