当前位置:嗨网首页>书籍在线阅读

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内。