CortexM系列的Hardfault 问题跟踪方法

一、Cortex内部寄存器的作用:

程序状态寄存器xPSR

在arm7时代的程序状态寄存器是这样的。将整个寄存器划分为4个域,[31-24]是标志域,用于判断计算是否溢出进位为0等。[23-16]是状态域没有使用,[15-8]是扩展域没有使用,[7-0]是控制域用于控制中断的模式。

31           30           29           28           27           26-25     24           23 16     15-8       7              6              5              4-0

N             Z              C             V             Q             unused J              unused unused I               F              T              MODE

cortex的程序状态寄存器xpsr,将整个寄存器分为三个子状态寄存器(部分位没有使用):

应用程序 PSR(APSR)—对应cpsr标志域[31-27],(由8位减到5位)

执行 PSR(EPSR)—对应cpsr没有使用的状态域和扩展域

中断号 PSR(IPSR)—对应cpsr的控制域[8-0](增加了1位)

31           30           29           28           27           26-25     24           23 -16    15-10     9              8-0

N             Z              C             V             Q             ICI/IT     T              unused ICI/IT                     中断号

APSR

N:表示两个有符号整数运算时,N==1表示运算结果为负数,N=0表示运算结果为正数或者零。

Z:Z=1表示运算结果为0,Z=0表示运算结果不为0

C:无符号加法运算产生进位,则C=1,无符号减法运算产生溢出,则C=0;

V:有符号加减运算产生溢出,则V=1;

Q:饱和条件码标志位

IPSR

在arm7中,是通过一个特定的数来表示某个模式,而cortex中,只有两个模式,所以当IPSR等于0时候,处于线程模式时,在手柄模式下,为当前异常的异常号。

EPSR

用来说明是arm指令还是thumb指令,其实也就是控制域的[5]位

T:Thumb状态, T=1,ARM状态,T=0;

通用状态寄存器

由R0到R12寄存器构成,其中R0到R7是低组寄存器。所有指令都能访问它们,复位后的初始值是不可预料的。R8-R12 被称为高组寄存器。这是因为只有很少的 16 位 Thumb 指令能访问它们, thumb-2 指令则不受限制。复位后的初始值也是不可预料的。

中间结果保存寄存器

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值