博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】14.5.6 禁止和激活中断线
阅读量:7087 次
发布时间:2019-06-28

本文共 976 字,大约阅读时间需要 3 分钟。

原文网址: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. }  

转载地址:http://seyql.baihongyu.com/

你可能感兴趣的文章
GIS-008-ArcGIS JS API 全图
查看>>
js splice方法
查看>>
Linux--多网卡的7种Bond模式
查看>>
ADO 连接数据库,取到VT_DATE型日期转换成 int型
查看>>
properties 配置文件中值换行的问题
查看>>
Azure 部署 Asp.NET Core Web App
查看>>
Masonry和FDTemplateLayoutCell 结合使用示例Demo
查看>>
linux 切换用户之后变成-bash-x.x$的解决方法
查看>>
用备份控制文件做不完全恢复下的完全恢复(数据文件备份<旧>--新建表空间--控制文件备份<次新>--日志归档文件<新>)...
查看>>
python下RSA加密解密以及跨平台问题
查看>>
详解Java Spring各种依赖注入注解的区别
查看>>
android 区分wifi是5G还是2.4G(转)
查看>>
多个构造器参数使用构建器
查看>>
模板方法模式(Template Method)
查看>>
创建预编译头 Debug 正常 Release Link Error:预编译头已存在,使用第一个 PCH
查看>>
asp.net上传文件夹权限配置以及权限配置的分析
查看>>
IPC's epoch 6 is less than the last promised epoch 7
查看>>
C语言 · 寂寞的数
查看>>
android Menu 笔记
查看>>
Apache2.2和Apache2.4中httpd.conf配置文件 权限的异同
查看>>