|
发表于 2007-6-28 10:11:48
|
显示全部楼层
Post by realtang
上半部的也可以?想看到更多的证据.
因为楼上的文档没有提到上半部分.
我是这样来看的, 如果有不正确的地方, 请指正.
1.request_irq()这个函数的flag位可以被设置为SA_INTERRUPT,而该位被设置时,表明这是一个"快速"的中断处理例程,快速处理例程运行在中断的禁用状态下. 而中断禁用的话, 此时当然不能被其它中断打断, 但是如果不设置这个位呢?
2.在LDD3上说, 在现代系统中, SA_INTERRUPT只是在少数几种特殊的情况下使用.读者不应该使用SA_INTERRUPT标志. 除非有足够必要的理由想要在其它中断被禁用的时候运行自己的中断处理例程.
3.上半部与下半部最大的不同就是当底半部处理例程在执行时,所有的中断都是打开的.
4.通常, 如果设备有一个已注册的处理例程并且发生了中断, 则函数handle_IRQ_event会被调用以便实际调用处理例程, 如果处理例程是慢速类型(即SA_INTERRUPT未被设置), 将重新启用硬件中断, 并调用处理例程. 然后只是做一些清理工作. 接着运行软件中断.
综合这些, 而且在ULK中专门有一节是讲嵌套中断, 所以我认为中断处理程序是可以被其它中断打断的. 当然,此时它不能禁止中断. |
|