mikrocontroller.net

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


Autor: Thiemo (Gast)
Datum:

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

Autor: crazy horse (Gast)
Datum:

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

Autor: Rufus T. Firefly (Gast)
Datum:

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

Autor: Reiner (Gast)
Datum:

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

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.