ARM Cortex M4 SVCall

Gast #2811155
Lesenswert?

Hallo,

ich experimentiere mit einem STM32F407. Ich möchte SVC verwenden. Dazu 
habe ich folgenden Assemblercode geschrieben:

  mrs r0, psp
  ldr r0, [r0, #24]
  sub r0, r0, #2
  ldrb r0, [r0]
  bx          lr

normalerweise läuft mein Programm im Thread mode, daher muss ich da den 
PSP verwenden. Das funktioniert auch; in Zeile 2 wird der korrekte PC 
geladen, also die Adresse, wo die SVC Instruktion stand. Anschliessend 
möchte ich nun an dieser Adresse lesen, um den Immediate-Wert der SVC 
Instruktion zu kriegen - und dort liest der Prozessor immer 0x8A. Schaue 
ich mir im Debugger aber an die fragliche Adresse das Memory an, dann 
steht dort 0x07, da meine Instruktion auch

SVC #7

lautete. Was mache ich falsch?
#2998042
Lesenswert?

hi,

auch wenn der Beitrag schon etwas älter ist, für die Nachwelt:
1
MRS r4, PSP
2
LDR r4, [r4, #24]
3
SUB r4, r4, #2
4
LDR r4, [r4]
5
AND r4, r4, #255

Vorgehen:
PSP laden
Gesicherten PC aus Thread Kontext laden
Alten PC verringen um an den SVC Call zu kommen
Laden des Befehls an der Stelle
UND um die Nummer zu bekommen (untersten 8 Bit des SVC Befehls)
in r4 steht die SVC Nummer

Nachtrag:
1
MRS  r4, PSP
2
LDR  r4, [r4, #24]
3
SUB  r4, r4, #2
4
LDRB r4, [r4]

Läuft bei mir aber auch, also das LDRB funktioniert auch.
Getestet mit:
GNU ar (GNU Tools for ARM Embedded Processors) 2.21.1.20121016

Chris

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren