打印

请教关于伪中断的问题

[复制链接]
1701|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lahuoguo|  楼主 | 2010-6-23 16:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看伪中断看的云山雾绕,请教大侠用通俗的说法解释下伪中断,及其处理方法。

下面是书上写的:

例如,假设正在执行下面的代码:
     MRS     r0, cpsr
     ORR     r0, r0, # I_Bit : OR : F_Bit   ;禁止IRQ和FIQ中断
MSR     cpsr_c, r0

如果在执行 MSR 指令时接收到 IRQ中断,则执行以下操作:
z  保存 IRQ中断;
z  执行 MSR  cpsr , r0 指令来完成 CPSR 中 I 位和 F 位的设置;
z  响应 IRQ中断,因为 CPSR 的 I 位被置位前内核将对中断异常进行处理;
z  CPSR(I 位和 F 位已被置位)的内容移入 SPSR_irq。
这就意味着,在 IRQ中断服务程序的入口,人们可以看到 IRQ中断被处理的异常效果,
SPSR 的 I 位被置位。在上面的例子中,CPSR 和 SPSR 的 F 位都置位。表明在 IRQ 服务程
序的入口处 FIQ 被禁止,FIQ 将一直被禁止直到重新被使能。FIQ 不能通过 IRQ 返回来自
动重新使能。


后面这段不懂啊,哪位大侠能解释下,谢啦!

相关帖子

沙发
xinzha| | 2010-6-23 17:40 | 只看该作者
这怎么是伪中断呢?
正常情况下的流程是这样的:
1.中断发生。
2.cpu在执行完当前指令后响应中断,将当前模式下的cpsr复制到spsr_irq中,切换寄存器组,同时禁止irq中断(这些动作是cpu自动完成的),软件要保存lr等关键寄存器。
3.执行中断处理
4.返回前将spsr_irq的内容恢复到cpsr中,这也就相当于完成模式切换以及irq的使能。
5.恢复pc
你的这个例子里面是一个极端情况,给人的错觉是中断禁止了还能产生中断,而实际上中断是在禁止前上报,必须要得到执行的。至于fiq,由于它被显式地禁止了,所以它被禁止了。而如果在msr这条指令时产生了fiq中断的话,处理也是跟这个一样。

使用特权

评论回复
板凳
lahuoguo|  楼主 | 2010-6-25 10:01 | 只看该作者
本帖最后由 lahuoguo 于 2010-6-25 10:02 编辑

2# xinzha
我理解的伪中断:
伪中断的产生原因:异步中断处理
异步中断处理的产生原因:如果在内核中检测到中断和内核真正开始处理中断的
过程中VIC 的状态发生改变,则产生中断的异步特性
那如果有以下例子发生,在执行msr的时候接收中断:
         MRS     r0, cpsr
         ORR     r0, r0, # I_Bit : OR : F_Bit   ;禁止IRQ和FIQ中断
         MSR     cpsr_c, r0
      
我的理解是:
当在指令MSR  cpsr_c, r0时发生IRQ中断时,发生以下过程
1.此时保存IRQ中断
2.执行MSR 指令,完成 CPSR 中 I 位和 F 位的设置
3.将当前模式下的cpsr复制到spsr_irq中,切换寄存器组,lr,
响应 IRQ中断处理,spsr_irq的内容恢复到cpsr中,恢复PC
那么是不是此时CPSR的I位和F位都被置1,所以都被禁止了,从而导致不能再进
行IRQ和FIQ中断。
我的理解对吗?

使用特权

评论回复
地板
xinzha| | 2010-6-28 10:06 | 只看该作者
你的理解是正确的。

使用特权

评论回复
5
lahuoguo|  楼主 | 2010-6-29 16:57 | 只看该作者
4# xinzha
谢谢大侠啊!

使用特权

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

本版积分规则

0

主题

9

帖子

1

粉丝