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?
Gripo schrieb: > 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 Woran erkennst Du denn, dass 0x8A gelesen wird?
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.