在嵌入式系统的设计中,与外设交互,基本是两种模式:轮询和中断。考虑到CPU与外设之间的速度差,如果涉及到与外设通信,一般采用中断的方式:只有当外设完成了数据发送或者接收,才中断CPU,获得处理,这样可以保证CPU的处理效率最高。
与数据收发相关的中断,中断处理程序与外部程序(操作系统和应用程序)之间的数据交换方式的设计是中断处理程序设计的一个关键部分,直接影响系统的工作效率,甚至是一些偶发性故障的原因。
数据交换的主要考虑的因素有:数据完整性(保证数据不丢失)、交换的效率(尽量减少CPU的参与)、执行效率(中断处理程序的执行应尽量保证时间短)、异常数据丢弃的效率(尽可能在离入口近的位置丢弃异常数据)。其中数据完整性经常会被忽视,中断处理程序的不恰当导致的数据丢失经常会与通信干扰导致的数据丢失相混淆,从而掩盖了真正的问题。
本文主要探讨中断处理程序与外部程序之间的数据交互的方式及其优缺点。
FIFO结构缓存
这是一种最简单直观的数据交互方式,采用循环Buffer作为缓存,主要用于数据接收。其结构如下: