关于linux注册的中断函数

我的设备是外接的UART接口芯片,对芯片的收发中断做终端服务程序。有些想不通的是:我注册的中断服务程序什么情况下会调用?以前理解的中断是当产生中断时系统自动跳到对应中断号的服务程序,但是这个中断是外部芯片产生的,所以我是否应该用个进程不停轮询UART接口芯片的中断状态寄存器?但是这样不就没有中断的意义了吗,整个就是个轮询。求高手指点一般是如何用中断处理外部器件的中断事件的?

我也不完全理解,但是比你知道的多点。
Linux中,分内核态和用户态。
你写的所有的驱动,都是出于内核态->可以直接使用内核相关资源;
应用层,都是用户态->无法直接操作底层的东西 -> 想要操作,比如获得权限,切换到内核态,然后才能操作。

你这里的需求,我的理解是:
对应你这句

“在中断服务程序中操作另一个外设”
不知道你的目的和打算用的手段是啥
一般的,ISR中,操作别的设备,常见的是:
设置对应的(比如该硬件本身,或者别的设备B的)寄存器的对应的位,以便通知其某种事情发送或状态变化了。
然后设备B会:
要么是由于(被修改了寄存器而)发生了中断,然后可以接着处理其所要做的事情;
要么是一直轮训,检测对应的某种资源释放变化,比如上面被改的寄存器的对应的位,发现变化了,再去调用你的函数,做对应的处理。

注意:
中断,不论是哪个设备的中断,都不应该占用(CPU)太长时间
-> 导致别的中断或服务无法及时运行

仅供参考。
1
从内核空间返回用户空间时,kernel检查是否有pending signal,如果有,执行。
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网