www.mikrocontroller.net

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

Autor: Klaus B. (nuccleon)
Datum: 27.03.2008 10:45

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: 27.03.2008 11:03

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: 27.03.2008 11:07

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

Weitere Vorschläge??
Autor: Christian R. (supachris)
Datum: 27.03.2008 11:19

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: 27.03.2008 11:27

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 Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net