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:
1 | sleep_msp( 8 ); /* Aufruf der Assemberroutine sleep_msp */
|
Zur Vollständigkeit hier noch die ASM Routine:
1 | sleep_msp:
|
2 | DINT
|
3 | CLR &TACTL
|
4 | MOV #TASSEL0+MC1+TACLR,&TACTL
|
5 | MOV R12,&TACCR0
|
6 | MOV #LPM3+GIE,SR
|
7 | 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