强大的arm板——中断与轮询你选择谁?

一.问题的引出

有这样一道嵌入式的面试题,中断方式与轮询方式哪个效率高?

   我们先谈谈中断与轮询。

二.中断

1.中断的定义

中断是指CPU在执行过程中出现了某些突发事件时,CPU必须暂时当前的程序,转去处理突发事件,处理完毕后CPU又返回原程序被中断的位置,并继续执行。

2.中断诞生记

(1)外设设备的处理速度慢于CPU
(2)轮询,定期做设备检查做了不少无用功

3.中断注册函数

我的开发板是三星S5PV210,它的中断注册函数为:request_irq(irq,handler,flags,name,dev)
irq:中断号
handler:中断处理函数 irqreturn_t (*) (int,void*)
flags:中断标志位
IRQF_SHARED:表示多个设备可以共享一个中断号
IRQF_SAMPLE_RANDOM:随机数
IRQF_TRIGGER_RISING:上升沿触发
IRQF_TRIGGER_FALLING:下降沿触发
IRQF_TRIGGER_HIGH:高电平出发
IRQF_TRIGGER_LOW:低电平出发
name:名称
dev:传递给回调函数handler的参数
返回值:0  注册成功
     非0注册失败

4.中断的特点

(1)中断处理程序不属于任何一个进程
(2)在中断上下文中不能调用可能引起阻塞的函数,也不能执行sleep
(3)在中断上下文中不执行内核与用户空间的数据交换

5.中断处理流程

强大的arm板——中断与轮询你选择谁?

.轮询

1.轮询的定义

    轮询是一种CPU决策如何提供周边设备服务的方式,又称"程控输出入"(Programmed I/O)。轮询法的概念是,由CPU定时发出询问,依序询问每一个周边设备是否需要其服务,有即给予服务,服务结束后再问下一个周边,接着不断周而复始。


四.问题分析

    回到刚才的那个问题,如果面试官给你提了这个问题,给我的感觉是下了一个套。看了一些书籍,认为中断效率高于轮询,我的观点是:具体情况具体分析。
    为什么这么说呢?
如果请求设备是一个频繁请求CPU的设备,或者有大量数据请求的网络设备,轮询方式效率更高。
    如果该设备请求频率比较低,中断的效率会更高一些。


一般情况下,外接的设备请求率都比较低,大多数硬件设备驱动程序开发都采用中断方式。