• 【转】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中Class.forName()用法和newInstance()方法详解
    开发和学习中好用的工具
    ubuntu修改默认的apt源
    区块链共识算法总结(PBFT,Raft,PoW,PoS,DPoS,Ripple)
    比特币白皮书:一个点对点的电子现金系统(百度网盘)
    session和cookie的区别
    HTTP中GET,POST和PUT的区别
    三小时快速入门Python终结篇--其他模块导入
    C/C++ 多继承{虚基类,虚继承,构造顺序,析构顺序}
    C++ 实现vector<std:string> 版本
  • 原文地址:https://www.cnblogs.com/wi100sh/p/4875063.html
Copyright © 2020-2023  润新知