Linux Kernel的中断处理函数中是否会被其它程序(中断/异常)打断?

电子说

1.3w人已加入

描述

先说结论

  • 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.DPSTATE.A都是被enabled,所以irq/fiq正在执行的时候,是可能被 WatchpointBreakpointSoftwareStepexceptionsSerror打断的

  • 3、当一个irq/fiq正在执行时 ,还会被别的程序打断吗?

    当然可以,同步异常嘛!

代码/文档导读

(1) 如下代码展示了,在一进入irq/fiq的时候,就调用 enable_daPSTATE.DPSTATE.A unmasked了。所以irq/fiq中断,是可以被 WatchpointBreakpointSoftwareStepexceptionsSerror打断的

串口中断

(2) irq和fiq属于异步异常,具有同样的优先级。而同步异常的优先级又高于异步异常的优先级,同意异常的优先级 如下所示 (也就意味着以下同步异常都可以打断正在执行的irq/fiq):

串口中断

串口中断

串口中断

串口中断

(3)如果开启了中断优先级,则在irq/fiq进入的时候,也会再次enalbe irq/fiq

串口中断

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分