zoukankan      html  css  js  c++  java
  • 【转】14.5.6 禁止和激活中断线

    原文网址:http://book.51cto.com/art/201311/418637.htm

    14.5.6  禁止和激活中断线

    在上一节中讨论的几个宏只能禁止和激活处理器上所有的中断。但在某种情况下,只需要禁止或激活一条特定的中断线。这就需要使用本节讨论的一些函数。禁止和激活特定中断线的函数如下:

    1. void disable_irq(unsigned int irq);  
    2. void disable_irq_nosync(unsigned int irq);  
    3. void enable_irq(unsigned int irq);  
    4. void synchronize_irq(unsigned int irq);  

    其中disable_irq和disable_irq_nosync函数都用于禁止中断控制器上指定的中断线,也就是说禁止了指定中断(irq)向系统中所有处理器的传递。这两个函数的区别是disable_irq函数只有在当前正在执行的所有处理程序完成后才会返回,而disable_irq_nosync函数会立即返回(不管当前是否还有没执行完的处理程序)。

    enable_irq函数用于激活中断控制器上指定的中断线。synchronize_irq函数用于等待一个特定的中断线上所有的处理程序都执行完。如果特定中断线上有一个处理程序还没执行完,synchronize_irq函数会一直阻塞。实际上disable_irq函数就是依靠disable_irq_nosync和synchronize_irq函数共同来实现的。首先会调用disable_irq_nosync函数禁止特定中断线。然后根据irqdesc.action判断中断线上是否还有处理程序在执行。irqdesc.action是一个指针,用于指向中断线上处理函数指针的链表的第一项。如果irqdesc.action为0,表明该链表为空,也就表明中断线上的处理程序都执行完了。disable_irq函数的代码如下:
     

      1. void disable_irq(unsigned int irq)  
      2. {  
      3. struct irqdesc *desc = irq_desc + irq;  
      4. disable_irq_nosync(irq);  
      5. if (desc->action)  
      6. synchronize_irq(irq);  
      7. }  
  • 相关阅读:
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 大臣的旅费
    Java实现 蓝桥杯 历届试题 大臣的旅费
    Java实现 蓝桥杯 历届试题 大臣的旅费
    Java实现 蓝桥杯 历届试题 大臣的旅费
    Navicat查询哪些表有指定字段名
  • 原文地址:https://www.cnblogs.com/wi100sh/p/4875063.html
Copyright © 2011-2022 走看看