2010-06-01 5 views
4

Cortex-M3 프로세서의 MSP 및 PSP 레지스터 (메인 및 프로세스 스택 레지스터)에 액세스해야합니다.Keil의 μVision을 사용하여 Cortex-M3의 MSP 및 PSP 레지스터에 액세스하기

저는 C/C++로 글을 쓰고 있습니다.

μVision 및 관련 컴파일러는이 Thumb-2 전용 코어에 대한 인라인 어셈블리를 허용하지 않습니다. 어쨌든 좋은 아이디어가 될지 확신하지 못합니다.

스레드 나 처리기 모드에서 실행되었는지 여부에 관계없이 svc 명령의 즉시 값을 추출 할 수 있도록이 작업을 수행해야합니다.

감사합니다.

답변

4

내가 이것을 확인하는 순간에 카일 컴파일러에 액세스 할 수없는,하지만 문서에 따라 컴파일러의 "명명 된 레지스터 변수"기능을 사용할 수 있어야합니다 :

register uint32_t msp __asm("msp"); 
register uint32_t psp __asm("psp"); 
+0

  • http://www.keil.com/support/man/docs/armcc/armcc_CHDHCIEE.htm 감사합니다, 마이클. 나는 인라인 어셈블리를 할 수 있다는 것을 몰랐다. 컴파일러는 암 모드 명령어가 필요하고 Cortex-M3 만 Thumb-2를 수행하기 때문에 블록 인라인 어셈블리를 거부합니다. –

  • +0

    물론 Keil의 한계. GCC는 Cortex-M3에서 인라인 어셈블리를 허용합니다. –

    1

    이와 비슷한 경우, 보통 작은 어셈블리 콜 아웃을 사용합니다.

    특수 레지스터 액세스 명령어 (MRS/MSR)를 사용하여 두 SP 중 하나에 액세스 할 수 있습니다. 내가 uVision과 생각의 MSP는 SP_main는, 그리고 PSP는 를 SP_process입니다.

    내 ARM 어셈블리 조금 녹슨이지만, 나는 그것이 같을 거라고 생각 : 귀하의 질문에서

    MRS R0, SP_process // R0 holds retval 
    BX LR    // return 
    

    을, 당신이 이미 MSP & PSP의 차이를 이해하고 방법을 알 것 같다 (LR을 통해) 어떤 것을 읽을 지 결정하십시오.