06-使能和屏蔽中断
10.3.2 使能和屏蔽中断
下列3个函数用于屏蔽一个中断源:
void disable_irq(int irq);
void disable_irq_nosync(int irq);
void enable_irq(int irq);
disable_irq_nosync()与disable_irq()的区别在于前者立即返回,而后者等待目前的中断处理完成。由于disable_irq()会等待指定的中断被处理完,因此如果在n号中断的顶半部调用disable_irq(n),会引起系统的死锁,这种情况下,只能调用disable_irq_nosync(n)。
下列两个函数(或宏,具体实现依赖于CPU体系结构)将屏蔽本CPU内的所有中断:
define local_irq_save(flags) ...
void local_irq_disable(void);
前者会将目前的中断状态保留在flags中(注意flags为unsigned long类型,被直接传递,而不是通过指针),后者直接禁止中断而不保存状态。
与上述两个禁止中断对应的恢复中断的函数(或宏)是:
define local_irq_restore(flags) ...
void local_irq_enable(void);
以上各local_开头的方法的作用范围是本CPU内。