Chinaunix首页 | 论坛 | 博客
  • 博客访问: 443080
  • 博文数量: 127
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 810
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-02 20:51
文章分类

全部博文(127)

文章存档

2018年(6)

2015年(18)

2014年(33)

2013年(70)

分类: 嵌入式

2018-02-26 17:37:12

在cortex-M3有异常发生时,系统自动保存xPSP, PC, LR, R12,{R3-R0}到当前task所使用的堆栈,之后系统切换到特权级的handle模式,并使用MSP,此时LR = 0xFFFFFFFD,从进程堆栈中做出栈操作,返回后使用PSP。此处只考虑无中断嵌套情况,由于入栈时顺序为:
PSP -----> R0           LOW
                R1            |
                R2            |
                R3            |
                R12           |
                LR            |
                PC            |
                xPSP       HIGH
从当前PSP中找到PC指针,该PC指向异常返回后代码继续执行的位置,而LR指向PC所在的函数的返回位置,如下图所示:
main{
            function1
                    {
                          ...
                          ...
                            PC-------exception occur, and save the xPSP, PC, LR, R12,{R3-R0}
                    }
LR----->function2
                    {
                    }
}
(正常函数调用时PC指针不用压栈,返回后将LR的内容赋值给PC,即可正确返回。)
阅读(1525) | 评论(0) | 转发(0) |
0

上一篇:Cortex-M3中断重定位

下一篇:没有了

给主人留下些什么吧!~~