Forum: Mikrocontroller und Digitale Elektronik Datenübergabe von Assembler zu C


von Thiemo (Gast)


Lesenswert?

Hallo

Ich hab ein Problem mit der Datenübergabe von Assembler zu C. Ich
möchte
aus meinem Assemblerprogramm ein Registerwert an ein C-Programm
übergeben, in C dann die Rechnung machen und danach den errechneten
Wert wieder in mein Assemblerprog. übergeben. Dieser errechnete Wert
soll dann im/über das Assemblerprog. im Display ausgegeben werden.

Hat das schon jemand gemacht ?
Kann mir BITTE jemand helfen ?!!

Im voraus DANKE !!!

Gruß
Thiemo

von crazy horse (Gast)


Lesenswert?

das wird dir keiner allgemein beantworten können. Dazu musst du wissen,
wie der Compiler die Werte übergibt, das hat mit C erstmal gar nichts
zu tun und wird auch nirgends festgelegt.
Man kann in Registern, im stack oder im SRAM übergeben, sogar je nach
Anzahl der Parameter gemischt. Auch das sonstige
Programm/Compilereinstellungen/Compilerversionen haben darauf Einfluss.
Mein Rat: vergiss es, Probleme sind vorprogrammiert. Mach es aus einem
Guss - entweder durchgängig Assembler oder Hochsprache.

von Rufus T. Firefly (Gast)


Lesenswert?

Die übliche Vorgehensweise ist genau andersherum: Aus einem C-Programm
werden Assembler"funktionen" aufgerufen oder diese per
Inline-Assembler an kritischen Stellen direkt eingefügt.

Prinzipiell ist es natürlich auch möglich, in einem in Assembler
geschriebenen Programm C-Module zu verwenden - dann muss halt das, was
üblicherweise der C-Startup-Code macht, vom Assemblerprogramm zur
Verfügung gestellt werden und natürlich mit den vom C-Modul benötigten
Libraries gelinkt werden.

Wie das im einzelnen geht, ist in der Dokumentation des verwendeten
C/Assembler-Entwicklungssystemes beschrieben.

von Reiner (Gast)


Lesenswert?

Kann man nachlesen im AVR-libc user manual und in diversen readme files
in WinAVR (source von libc downloaden).  Da steht auch welche Register
übergeben werden.
Oder:  Einfach mal eine einfache Funktion in C schreiben.
int foo(int a, int b)
{
  return (a+b);
}
void main (main)
{
 int x;
 x = foo (5, 10);
}
Das generierte .lss oder .lst file zeigt sehr schön was wie und wo
übergeben wird.

Reiner

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.