打印

中断产生后保存到LR的是PC+8还是PC+4

[复制链接]
3296|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
longfei3707|  楼主 | 2011-5-21 21:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近几天看了中断,对于其原理大概有一些了解.今天查阅资料时看了两本书<<ARM嵌入式系统开发---软件设计与优化>>和<<ARM系列处理器应用技术完全手册>>.让我疑惑的是当讲解FIQ中断时,在第一本书里说的是当有中断请求时,ARM执行完当前指令后响应中断,将当前的PC值加8后放入LR中,然后进入FIQ异常处理程序,返回时将LR减去4之后赋给PC,即跳转到中断发生时的下一条指令执行比如
 
PC1             MOV R1,R0      
PC1+4         MOV R2,R3
PC1+8         .....   

     在执行第一条语句时产生FIQ中断请求,在执行完此条指令后跳转到异常处理程序执行,并将当前指令地址加8后(PC1+8)传给LR.执行完异常处理程序将LR减4然后传给PC(SUBS PC,R14,#4)来进行返回,返回后继续执行的是第二条指令(MOV R2,R3).
这一个倒是好理解,因为取PC的值时,PC里存储的是当前指令地址+8(因为是流水线机制且字对齐).
     但是在第二本书里这种说法变了,还是以上面的两个MOV指令为例,第二本书上说的是当执行第一条指令时产生FIQ中断,ARM立即响应中断(第一条指令未执行完毕),然后将当前地址加8(PC1+8)并存到LR中,进入响应时处理器自动对LR进行调整,使LR=LR-4(即LR中存的地址是PC1+4),执行完异常处理程序将LR减4(LR中存的是PC1)然后传给PC(SUBS PC,R14,#4)来进行返回,返回后继续执行的就是第一条指令(MOV R1,R0),也就是中断产生时正在执行的那条指令.继续以上面两个MOV指令为例,对于这种操作第二本说给出的解释是:当发生FIQ异常时,因为外部中断请求中断了正在执行的指令(中断了第一条指令),当中断返回后,需要重新回到第一条指令执行,也就是说,返回地址应该是PC1,所以需要把LR减4后送回PC(SUBS PC.R14,#4).
    好了,以上就是我总结的这两本书关于FIQ中断的处理及返回过程,我有几个疑问
1-产生FIQ中断请求时,正在执行的指令是否立刻停止去响应中断,还是等执行完此条程序后再进行中断的响应.
2-跳转到异常处理程序中时LR中保存的是PC+4还是PC+8
3-FIQ异常处理程序结束后,是返回产生中断时执行的那条指令(PC1)重新执行,还是返回到中断产生的下一条指令(PC1+4)再执行.

相关帖子

沙发
inurl| | 2014-3-11 11:28 | 只看该作者
看ARM v5架构手册 , 中断向量表一章。讲的很透彻

使用特权

评论回复
板凳
ayb_ice| | 2014-3-11 21:42 | 只看该作者
不同版本的内核有些不一样

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:何惧天高~~~

3

主题

28

帖子

2

粉丝