mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik IAR Compiler; MSP430 Assemblerroutine; Übergabeparameter


Autor: Klaus B. (nuccleon)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich programmiere den MSP430F123 und verwende dabei den IAR C/C++ 
Compiler. Mein Code besteht aus einem *.s43 Assemblerfile, für 
zeitkritische Routinen, und einem *.c File.

Aus meinem C-Code heraus rufe ich div. Assemblerroutinen, z.B. 
sleep_msp, auf.

Der Aufruf sieht folgendermaßen auf:
   sleep_msp( 8 ); /* Aufruf der Assemberroutine sleep_msp */

Zur Vollständigkeit hier noch die ASM Routine:
sleep_msp:
   DINT
   CLR     &TACTL
   MOV     #TASSEL0+MC1+TACLR,&TACTL
   MOV     R12,&TACCR0
   MOV     #LPM3+GIE,SR
   JMP     RET

Nun meine eigentliche Frage ;-)
Der C-Compiler verfrachtet die Übergabeparameter (hier 8) immer an 
Register R12 (aufsteigend).

Wie bringe ich den Compiler dazu, Übergabeparameter an eine von mir 
favorisierte Stelle, z.B. R13, zu legen?

Geht das überhaupt?

Der Hintergrund meiner Frage.
Die verwendeten Assemblerroutinen sind zum Teil vorgegeben und verwenden 
nicht immer R12 als Arbeitsregister. D.h. ich muss vor dem Aufruf der 
Routine den Übergabeparameter explizit (z.B. mit Inline Assembler) ins 
entsprechende Register mappen, was meinen Code nicht unbedingt 
verständlicher macht.

Gruß Klaus

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin mir eigentlich ziemlich sicher, dass das leider nicht geht! In 
diesem Zusammenhang kann ich ansonsten nur die Application Note von TI 
empfehlen: "Mixing Assembler and C". Aber so wie es sich bei dir anhört, 
hast du die mit Sicherheit schon gelesen ;-)

Viele Grüße
Michael

Autor: Klaus B. (nuccleon)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab ich nicht gelesen :-)
Werde ich aber unverzüglich nachholen...

Weitere Vorschläge??

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Register für die Übergabe-Parameter sind vom Kompiler abhängig. Das 
kann man leider nicht ändern. Steht alles im "Mixing C and Assembler" 
Manual. Müsstest du mal schauen, dass du entweder die Routinen anpasst, 
oder die Routinen nach C portierst. Für die oben gepostete Routine macht 
ASM keinen Sinn, das kann man in C genauso schreiben, der Kompiler macht 
das selbe draus. Gerade beim MSP430 ist ASM nur noch in den seltensten 
Fällen von Nöten. Ich habs beim GCC immer mal gemerkt, wenn ich das 
Listing angeschaut hab, dass die Optimierung sehr gut ist, was besseres 
wäre mir auch nicht eingefallen.

Autor: Klaus B. (nuccleon)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach C Portieren ist ein schlechter Plan - Viele viele vorhandene 
Routinen
Routinen anpassen ist auch ein schlechter Plan - Routinen werden auch 
für andere, bereits vorhandene Programme verwendet und ich möchte 
konsistent bleiben.

Bleibt mir nur übrig, die Übergabeparameter in die entsprechenden 
Register zu mappen.

Naja, trotzdem danke für eure Vorschläge!

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.