先说结论
1、当一个irq/fiq正在执行时 ,是否可能会其它的irq/fiq打断呢?
(1)如果开启了中断优先级,则在irq/fiq进入的时候,也会再次enalbe irq/fiq,即也就是支持了中断嵌套。所以此时一个irq或fiq正在执行的时候,它是有可能被另外一个高优先级的irq/fiq num的中断抢占的。
(2)但是很遗憾,在我们的Linux Kernel系统中,至今都没有默认开启中断优先级,在一进入irq/fiq的时候,也没有再次enable irq/fiq. 所以这种情况下,一个正在执行的irq/fiq是不可能被另外的irq/fiq打断的。
2、当一个irq/fiq正在执行时 ,是否可能会其它异常打断呢?
当然可以,您仔细阅读代码就会发现,在一进入irq/fiq handler的时候,
PSTATE.D
、PSTATE.A
都是被enabled,所以irq/fiq正在执行的时候,是可能被Watchpoint
、Breakpoint
、SoftwareStepexceptions
、Serror
打断的3、当一个irq/fiq正在执行时 ,还会被别的程序打断吗?
当然可以,同步异常嘛!
代码/文档导读
(1) 如下代码展示了,在一进入irq/fiq的时候,就调用 enable_da
将 PSTATE.D
、 PSTATE.A
unmasked了。所以irq/fiq中断,是可以被 Watchpoint
、 Breakpoint
、 SoftwareStepexceptions
、 Serror
打断的
(2) irq和fiq属于异步异常,具有同样的优先级。而同步异常的优先级又高于异步异常的优先级,同意异常的优先级如下所示(也就意味着以下同步异常都可以打断正在执行的irq/fiq):
(3)如果开启了中断优先级,则在irq/fiq进入的时候,也会再次enalbe irq/fiq
作者:baron
文章来源:ARM精选
推荐阅读
欢迎关注ARM精选专栏, 欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。