Moin zusammen,
hab ein Problem mit Cortex-M3 und SVC.
Ich nutze:
- IAR EWARM 6.30
- Segger embOS 3.82
- STM32F103
Nachdem das RTOS gestartet ist, läuft die Applikation im
unpriviligierten Modus.
Nun möchte ich gerne in den priviligierten Modus schalten, um MSR
auszuführen.
Mein SVC-Handler sieht wie folgt aus:
1 | __SVCException
|
2 | TST LR, #4
|
3 | ITE EQ
|
4 | MRSEQ R0, MSP
|
5 | MRSNE R0, PSP
|
6 | B SVCException
|
bzw:
1 | extern void SVCException(uint32_t* const inSVCArguments_PU32)
|
2 | {
|
3 | uint32_t mySVCNumber_U32, mySVCParameter_U32[4];
|
4 |
|
5 | mySVCNumber_U32 = ((int8_t*) inSVCArguments_PU32[6])[-2];
|
6 | mySVCParameter_U32[0] = (uint32_t) inSVCArguments_PU32[0]; /* R0 */
|
7 | mySVCParameter_U32[1] = (uint32_t) inSVCArguments_PU32[1]; /* R1 */
|
8 | mySVCParameter_U32[2] = (uint32_t) inSVCArguments_PU32[2]; /* R2 */
|
9 | mySVCParameter_U32[3] = (uint32_t) inSVCArguments_PU32[3]; /* R3 */
|
10 | }
|
__SVCException ist an Index 11 in die Vektortabelle eingetragen. Hab ich
im Hexdump und Mapfile überprüft.
Die obigen Codebeispiele habe ich aus dem Yiu.
Wenn ich jetzt im unpriv. Modus "svc #0x01" ausführe, landet mein Code
sofort im HardFault-Handler.
Warum hier und nicht in __SVCException?
thanx, Arne