mikrocontroller.net

Forum: Compiler & IDEs C-Funktionen in Assembler aufrufen


Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich habe mir die Soft-USB-Lösung (alles in Assembler) von Igor Cesko
(http://www.cesko.host.sk, cesko@internet.sk) für den ATMega 8
heruntergeladen, assembliert, alles läuft wunderbar (1,5MBit USB mit
EEProm und USB-RS232 Wandler + Portpins-Schalten per USB, coole
Sache!!). Das Programm ist im "Atmel - Assembler" (also nicht GNU-As)
geschrieben.

Nun möchte ich in dieses Programm eigene Funktionen mit einbinden. Da
ich zu faul bin, alles in Assembler zu schreiben, will ich die
Funktionen in C schreiben und dann in den Assembler-Code einbinden. Das
ganze soll mit dem AVR-GCC (im WinAVR) passieren.

Ist dies überhaupt möglich? Hab bisher das sorum noch nicht gesehen.
Der Assemblercode müsste halt noch für den GNU-AS angepasst werden, das
geht aber.
Problem ist auch, das der Assemblercode die Hauptschleife samt Main()
enthält. Wie bringe ich das dem AVR-GCC bei??

Vielen Dank schon mal!

MfG, Tobi

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ist dies überhaupt möglich? Hab bisher das sorum noch nicht gesehen.

Jein.  Du hast halt kein Stück der Initialisierungen des
C-Laufzeitsystems.  Da der Assemblercode seinen Stack ja zumindest
initialisieren wird, ist der Teil erstmal OK, es bliebe nur noch die
Initialisierung der statischen und globalen Variablen, die dann nicht
erfolgt.  Das hängt dann von dir ab, ob du damit leben kannst.

Ich würde versuchen, stattdessen die Hauptschleife in C zu schreiben
und den Rest von dort aufzurufen.

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort
Hab grad gemerkt, dass es so gehen könnte:

-Assemblerteil (Main.S) (unsinniger Code, nur Beispiel!!):

.global main
.func main

.extern Test

main:
  push  r1
  add   r1,r2
  RCALL Test ;Funktion aufrufen
  pop   r1
        rjmp  main


C-Teil (Test.c):

void Test(void)
  {
  }

Beide Teile dann im makefile angeben!

Mein Problem ist, das das Assemblerprogramm halt nicht von mir stammt
und ich mir die Mühe ersparen will, dieses zu zerpflücken. Die
Anfangs-Initialisierungen macht das Assemblerprogramm.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst natürlich die ABI-Konventionen beachten:

http://www.sax.de/~joerg/avr-libc-user-manual/FAQ....

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hrmpf.  Das war leider das falsche Manual...  Hier der Link zum
offiziellen:

http://www.nongnu.org/avr-libc/user-manual/FAQ.htm...

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.