|
看资料上的说明:
如果在执行禁能中断指令时内核接收到中断请求,ARM7 系列器件仍然响应中断。这种
情况出现在IRQ 和FIQ 中断中。
例如,假设正在执行下面的代码:
MRS r0, cpsr
ORR r0, r0, # I_Bit : OR : F_Bit ;禁止IRQ 和FIQ 中断
MSR cpsr_c, r0
如果在执行MSR 指令时接收到IRQ 中断,则执行以下操作:
􀁺 1 保存IRQ 中断
􀁺 2 执行MSR cpsr , r0 指令来完成CPSR 中I 位和F 位的设置
􀁺3 响应IRQ 中断,因为CPSR 的I 位被置位前内核将对中断异常进行处理
􀁺 4 CPSR(I 位和F 位已被置位)的内容移入SPSR_IRQ
---------------------------
这段是不是说,发生了伪中断,那么,SPSR的I 和F都被置位,那么从IRQ中断返回时,用SPSR恢复CPSR时,I和F位都将被置位,也就是禁止了IRQ和FIQ中断,但是看解决办法三个都没有说明如何防止IRQ中断被误禁止的问题啊。
还有不明白的是:
资料中提到的解决办法:
方案2:分别使用两条写CPSR 的指令来禁能IRQ 和FIQ
MRS r0 , cpsr
ORR r0 , r0 , # I_Bit ;禁止IRQ
MSR cpsr_c , r0
ORR r0 , r0 , # F_Bit ;禁止FIQ
MSR cpsr_c , r0
这种办法虽然可以防止SPSR的F位被置位的问题,但是并不能防止SPSR的I被置位的问题啊。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|