一、基本概念
1.1 轮询、中断和DMA三种方式
对I/O设备的访问常见有轮询、中断、DMA三种方式;
1.1.1 什么是轮询
对I/O设备的程序轮询(Polling)的方式,是早期的计算机系统对I/O设备的一种管理方式。它定时对各种设备轮流询问一遍有无处理要求。轮流询问之后,有要求的,则加以处理。在处理I/O设备的要求之后,处理机返回继续工作。
尽管轮询需要时间,但轮询不比I/O设备的速度要快得多,所以一般不会发生不能及时处理的问题。
当然,再快的处理机,能处理的输入输出设备的数量也是有一定限度的。而且,程序轮询毕竟占据了CPU相当一部分处理时间,因此程序轮询是一种效率较低的方式,在现代计算机系统中已很少应用。
轮询也需要硬件支持,提供标志位来向CPU指示自身工作状态;
1.1.2 什么是中断
处理器的高速和输入输出设备的低速是一对矛盾,是设备管理要解决的一个重要问题。为了提高整体效率,减少在程序直接控制方式中CPU之间的数据传送,是很必要的。
中断是一种硬件机制,在这种机制中,设备会在就绪条件达成后主动通知CPU它需要引起注意,中断可以随时发生,需要CPU立即处理。因此,当CPU通过指示中断请求线收到中断信号时,CPU停止当前进程并通过将控制权传递给服务设备的中断处理程序来响应该中断。
不过,中断方式仍然存在一些问题。首先,现代计算机系统通常配置有各种各样的输入输出设备。如果这些I/O设备都同过中断处理方式进行并行操作,那么中断次数的急剧增加会造成CPU无法响应中断和出现数据丢失现象。
其次,如果I/O控制器的数据缓冲区比较小,在缓冲区装满数据之后将会发生中断。那么,在数据传送过程中,发生中断的机会较多,这将耗去大量的CPU处理时间。
中断可能是内部或者可预期的,如定时器,ADC中断等
也可能是外部或不可预期的,如外部中断,UART/IIC/SPI/CAN接收中断等
1.1.3 轮询 VS 中断
轮询 |
中断 |
|
本质 |
软件协议/程序 |
硬件机制 |
触发 |
顺序执行 |
随时发生 |
响应 |
主循环中的程序根据条件针对执行 |
执行主循环之外的中断服务子程序 |
和其他任务的关系 |
同步 |
异步 |
特点 |
不耗费硬件资源 |
需要硬件支持 |
适用范围 |
适于处理对时间响应要求低的场合 |
适于处理对响应要求非常高的事件 |
1.1.4 前后台+时间片轮询 程序框架
单一的轮询程序框架程序执行效率低,任务间的互相干扰严重,引入中断后,我们在单片机的裸机开发上经常使用下述的 前后台+时间片轮询 程序框架。
前台为中断线, 定时器中断产生时间片轮询时基;
外部中断对异步信号及时响应,中断快进快出,只为主循环提供轮询标志;
后台为轮询线,通过查询各类标志判断任务就绪条件执行;
轮询周期相对稳定,实时性较高;
1.1.5 直接内存存取(DMA)方式
DMA(Direct Memory Access,直接存储器访问) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用。
1.2 中断详解
1.2.1 中断的基本流程
1&#