Cortex-M3 und SVC

Gast #2715665
Lesenswert?

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
Gast #2716404
Lesenswert?

> Nachdem das RTOS gestartet ist, läuft die Applikation im
> unpriviligierten Modus.

Schaltest du selber in den nicht priviligierten Thread Mode um? Weil 
nach Reset ist der Cortex M3 im priviligierten Mode und embOS stellt das 
nicht um, ansonsten würde nichts funktionieren. Sprich alle Tasks laufem 
im priviligierten Thread Mode.

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