Gast
#3148622
Hallo,
habe einen SVC Handler für Cortex M3 entsprechend Handbuch gemacht und
es funktioniert :-)
Was ich aber nicht verstehe: wieso funktioniert das Return am Ende mit
BX LR? Schliesslich ist im SVC Handler im LR nicht die
Rücksprungadresse. Nun wird am Ende vom SVC Handler ohnehin der Stack
automatisch zurück geholt, so dass der PC ohne zutun wieder stimmt.
Somit ist das BX LR aber eigentlich nur ein Dummy, oder? Oder wird an
dem Code im LR erkannt, dass jetzt der SVC Handler zurück kommt?
***
SVC_Handler
TST LR, #4 ; kernel mode?
ITE EQ
MRSEQ R0, MSP ; kernel stack
MRSNE R0, PSP ; user stack
SVCHandler_main
; stack contains: r0, r1, r2, r3, r12, r14, previous PC, xPSR
; usage of r0, r1, r2, r3 requires no push to stack
LDR R0, [R0, #6*4] ; previous PC
LDRB R0, [R0, #-2] ; previous 16-bit low-byte is svc number
CMPS R0, #0x33 ; call service e.g. 0x33
BEQ service_33
...
default
BX LR ; PC=LR (return)
***
Danke!