由request_irq()函数引发对中断的理解

2024-02-05 08:58

本文主要是介绍由request_irq()函数引发对中断的理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://blog.chinaunix.net/uid-24666775-id-3787938.html

http://blog.chinaunix.net/uid-24666775-id-3787938.html


由request_irq()函数引发对中断的理解 2013-07-04 17:18:37

分类: LINUX

1、  中断的理解

中断你可以理解为就是一种电信号,是由硬件设备产生的然后发送给处理器,处理器接收到中断后,就会马上向操作系统反映此信号,之后就是系统的工作了。

这里有两个注意的地方,第一中断是随时都可以产生,意味着中断的处理程序随时都可以执行,所以得保证中断处理程序能够快速执行,才可能尽快的恢复中断代码执行,所以中断代码尽量简短。第二每一个中断都有自己唯一的数字标记,这样操作系统才能对症下药

2、  注册中断中断处理程序

中断处理程序是管理硬件的驱动程序的组成部分,每一设备都有相关的驱动程序,驱动程序可以通过request_irq()函数注册一个中断处理程序,并且激活给定的中断线,来处理指定的中断,原型如下:

int request_irq(unsigned int irq,

           irq_handler_t handler,

           unsigned long flags, const char *devname, void *dev_id)

第一个参数irq表示要分配的中断号,就我目前所接触的都是预先已经预定好的,还没试着通过探测或者动态来确定中断号

第二个参数handler是一个指针,指向处理这个中断的实际中断处理程序,只要操作系统一接收到中断,该函数就被调用,这个函数稍后讨论

第三个参数flags中断处理程序的标志,这个标志可以是一个也可以是多个,列举几个最重要的标志:

           IRQF_DISABLED: 该标志被设置后,意味内核在处理中断处理程序本身的时候,禁止了其他所有的中断。如果不设置,中断处理程序可 以与除本身之外的其他任何中断同时运行。显而易见我们一般不去这么野蛮的设置这个标志

           IRQF_TIMER:为系统定时器的中断处理而准备的

           IRQF_SHARED:这个中断标志经常能遇见,这个标志意思就是多个中断处理程序之间可以共享中断线,概括起来就是没有这个标志就只能独自一个人占用,标志了,就是很多人可以占用这个中断号来

第四个才参数就是自定义与中断设备相关的文本了

第五个参数dev,看到第三个参数中IRQF_SHARED时候,你会不会有这样的疑问,假如现在我要释放当前共享的指定这个中断程序时候,我如何释放?会不会把其他占用也会删除掉,这就是第五个参数的意义,如果中断线是共享的,那么就必须传递能够代表当前设备的唯一信息

request_irq()成功返回0,如果返回非0,就表示有错误发生,这个时候你可以考虑当前中断是否被占用了,所以可以加上IRQF_SHARED标志

3、  中断处理程序

这里延续上面的handler指针,原型如下:

           Static  irqreturn_t intr_handler(int irq, void *dev)

这里唠叨一下,不知道大家面试时候有没有遇到像这样的题目

__interrupt double compute_area (double radius)

{

double area = PI * radius * radius;

printf(" Area = %f", area);

return area;

},指出上面中断函数出现的错误,不知道的就认真看下面的  O(_)O

第一个参数irq就是这个处理程序要响应的中断号,这个我认为现在没有多大意义了,因为上面有讲述到第五个参数的意义

 第二个参数dev是一个通用的指针,同样的,还是将上面讲述到的第五个参数拿过来理解。

返回值irqreturn_t,先看下面的定义

enum irqreturn {

//中断处理程序检测到一个中断,但该中断对应的设备并不是在注册处理函数期间指定的产生源时,返回这个值

    IRQ_NONE,

//中断处理程序被正确调用且确实是它多对应的设备产生了中断,返回这个值

    IRQ_HANDLED,

    IRQ_WAKE_THREAD,

};

typedef enum irqreturn irqreturn_t;

关于描述到这里,我想对中断有一个大概的了解,说白了就是硬件向处理器发送一个电信号,系统收到信号之后根据初始化的标志去处理相应的中断处理程序。
如果熟悉中断的应该知道,我这里所有描述的其实都是中断处理程序的上半部,而下半部是什么,为啥要将中断分为上下部两部分?现在脑子里先有一个概念就是中断是随时产生的,也就意味着可能会打断了一些当前重要的工作而去处理你的中断处理程序,那当然我的中断程序是越快越好。同时中断他是不能被阻塞的,即不能在进程的上下文运行。基于上述原因 就是引入下半部的原因了。






这篇关于由request_irq()函数引发对中断的理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/680394

相关文章

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

MySQL count()聚合函数详解

《MySQLcount()聚合函数详解》MySQL中的COUNT()函数,它是SQL中最常用的聚合函数之一,用于计算表中符合特定条件的行数,本文给大家介绍MySQLcount()聚合函数,感兴趣的朋... 目录核心功能语法形式重要特性与行为如何选择使用哪种形式?总结深入剖析一下 mysql 中的 COUNT

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

Python get()函数用法案例详解

《Pythonget()函数用法案例详解》在Python中,get()是字典(dict)类型的内置方法,用于安全地获取字典中指定键对应的值,它的核心作用是避免因访问不存在的键而引发KeyError错... 目录简介基本语法一、用法二、案例:安全访问未知键三、案例:配置参数默认值简介python是一种高级编

python 常见数学公式函数使用详解(最新推荐)

《python常见数学公式函数使用详解(最新推荐)》文章介绍了Python的数学计算工具,涵盖内置函数、math/cmath标准库及numpy/scipy/sympy第三方库,支持从基础算术到复杂数... 目录python 数学公式与函数大全1. 基本数学运算1.1 算术运算1.2 分数与小数2. 数学函数

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(