首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Keil的µVision在C/C++代码中访问Cortex-M3的MSP和PSP寄存器

使用Keil的µVision在C/C++代码中访问Cortex-M3的MSP和PSP寄存器
EN

Stack Overflow用户
提问于 2010-06-01 12:19:13
回答 2查看 4.7K关注 0票数 4

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

我是用C/C++编写的。

µVision和相关的编译器不允许你为这个Thumb-2 only内核做内联汇编(我不确定这是不是一个好主意)。

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

谢谢,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-01 23:56:09

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

代码语言:javascript
复制
register uint32_t msp __asm("msp");
register uint32_t psp __asm("psp");

  • http://www.keil.com/support/man/docs/armccref/armccref_cjahjdbg.htm
  • http://www.keil.com/support/man/docs/armcc/armcc_CHDHCIEE.htm
票数 5
EN

Stack Overflow用户

发布于 2010-06-01 21:40:50

对于这样的事情,我通常使用一个小的汇编调用来完成它。

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

我的手臂组合有点生锈了,但我想应该是这样的:

代码语言:javascript
复制
MRS   R0, SP_process   // R0 holds retval
BX    LR                // return

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2947248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档