linux不可中断状态,linux的中断模式

本文探讨了Linux内核中中断处理的边沿触发和电平触发模式的区别。电平触发的中断在服务完成后才清除标志,而边沿触发则在开始时清除,以防止丢失中断。边沿触发可能存在中断服务前后清除标志的不同策略,可能导致重复处理中断。文章分析了这两种模式对内核中断处理的影响,并指出在实际应用中如何选择和管理中断类型。
摘要由CSDN通过智能技术生成

在用request_irq申请中断的时候,需要选择中断模式,不考虑快速中断的话,就有四种中断,两种触发,边沿触发和电平触发。

但是这两者触发方式有什么区别呢?

对内核的中断处理有什么影响呢?

一般处理器每执行一条指令时发现中断标志就会进入中断模式(ARM架构),linux主要做了保护现场环境,根据总标志进入各中断散转表地址。

这里只考虑中断相关的,不考虑和进程调度和延时处理相关的。

先看看硬件中断机制:

例如:Uart子中断条件满足 --》经过掩码 --》置uart子中断标志 --》 VIC中断掩码 --》 VIC中断标志 ---》 处理器的CPSR寄存器中断标志置位

从VIC这里以上都由linux内核管理,并由申请中断时指定的标志做出不同的处理。

比如,电平触发的中断:

linux进入中断,先执行注册中断的服务,再清除总中断标志,即VIC和处理器的标志。

而,边沿触发的中断:

linux进入中断,先清楚总中断标志,再执行注册的中断服务。

ok了,但是为什么要这么做呢?

可以想一下,linux进入一般中断后(不考虑中断嵌套),当前的中断是禁止的。

而中断标志是由硬件条件导致的,所以完全处理完了中断标志才不会置位,比如uart的FIFO满了;而边沿型的中断,比如按下按键外部电平跳变导致中断标志置位,一次清除中断标志

就可以了。

所以电平的中断如果处理前中断标志被清除了,则马上也会置位,导致中断返回时马上又重新进一遍中断。2.4内核就因为这个问题有很多bug。

对于边沿触发的中断,因为清除了就不会再被置位,所以不需要这样做,在执行中断服务之前和之后都可以,但是在中断服务之后的话,也许会在中断过程中再有一个触发沿,那么

就会丢失一个中断。

在嵌入式SOC内部大多是电平触发,所以处理完了再清除标志;而外部中断可以根据情况设置为电平中断和边沿中断,对边沿触发的中断,进入中断服务程序最好就先清除中断标志。

只是我有个问题,边沿触发中断的服务程序进去前,总中断标志应该被清除了,但是进去后第一条指令不是清除子中断标志的话,是不是子中断标志又会导致总中断标志置位呢?

这点理解还不是很清楚,欢迎大家知道的话说一下。

阅读(2030) | 评论(1) | 转发(0) |

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值