使用Keil的μVision以C / C ++代码访问Cortex-M3的MSP和PSP寄存器

时间:2010-06-01 04:19:13

标签: embedded cortex-m3

我需要访问Cortex-M3处理器的MSP和PSP寄存器(主寄存器和进程堆栈寄存器)。

我正在用C / C ++编写。

μVision和相关的编译器不允许你为这个只支持Thumb-2的核心进行内联汇编(而且我不确定它是不是一个好主意。)

我需要这样做,以便我可以提取svc指令的立即值,无论它是在线程还是处理程序模式下执行。

谢谢,

2 个答案:

答案 0 :(得分:4)

我目前无法访问Keil编译器来验证这一点,但根据文档,您应该能够使用编译器的“命名寄存器变量”功能:

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

答案 1 :(得分:1)

对于这样的事情,我通常会使用一个微小的装配调用来实现它。

您可以使用特殊寄存器访问指令(MRS / MSR)访问任一SP。我认为对于uVision,MSP是 SP_main ,而PSP是 SP_process

我的ARM程序集有点生疏,但我认为它类似于:

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

从您的问题来看,您似乎已经理解了MSP与MSP之间的区别。 PSP,并知道如何确定要读取哪一个(通过LR)。