C-Funktionen in Assembler aufrufen

Gast #283951
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
Moderator Persönliche Seite #283952
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.
Gast #283953
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.