Embedded 访问C/C+中Cortex-M3的MSP和PSP寄存器+;使用Keil';sµ;视野
我需要访问Cortex-M3处理器的MSP和PSP寄存器(主寄存器和进程堆栈寄存器) 我在用C/C++写东西 µVision和相关编译器不允许您为这个仅Thumb-2内核进行内联组装(我也不确定这是否是个好主意) 我需要这样做,以便能够提取svc指令的立即值,而不管它是在线程模式还是处理程序模式下执行的Embedded 访问C/C+中Cortex-M3的MSP和PSP寄存器+;使用Keil';sµ;视野,embedded,cortex-m3,Embedded,Cortex M3,我需要访问Cortex-M3处理器的MSP和PSP寄存器(主寄存器和进程堆栈寄存器) 我在用C/C++写东西 µVision和相关编译器不允许您为这个仅Thumb-2内核进行内联组装(我也不确定这是否是个好主意) 我需要这样做,以便能够提取svc指令的立即值,而不管它是在线程模式还是处理程序模式下执行的 谢谢,对于这样的事情,我通常使用一个小的集合调用来完成 您可以使用特殊寄存器访问指令(MRS/MSR)访问任一SP。我认为使用uVision时,MSP是SP\u main,PSP是SP\u进程
谢谢,对于这样的事情,我通常使用一个小的集合调用来完成 您可以使用特殊寄存器访问指令(MRS/MSR)访问任一SP。我认为使用uVision时,MSP是SP\u main,PSP是SP\u进程 我的手臂总成有点生锈了,但我想应该是这样的:
MRS R0, SP_process // R0 holds retval
BX LR // return
从您的问题来看,您似乎已经理解了MSP和PSP之间的区别,并且知道如何确定要读取哪一个(通过LR)。我目前无法访问Keil编译器来验证这一点,但根据文档,您应该能够使用编译器的“命名寄存器变量”功能:
register uint32_t msp __asm("msp");
register uint32_t psp __asm("psp");