在主程序循环中判断是否有中断:
,9-5*"&
E
3G"Q3$3.%O<*<* 2C%I"&&
E
-.%IC*=P*%-($%3.%"&>
$0-%89"-.%IC*&;是不是很象 ,3 程序的消息解析函数M;
E;对,我们的中断类型解析很类似于消息驱动 ;
8'$*+++R;我们称其为“中断驱动”吧? ;
N
D(*'B>
8'$*+++R
N
D(*'B>
N
F
F
F
按上述方法设计的中断服务程序很小,实际的工作都交由主程序执行了。
7硬件驱动模块
一个硬件驱动模块通常应包括如下函数:
()中断服务程序 3
()硬件初始化
'7修改寄存器,设置硬件参数(如 应设置其波特率, 设备应设置其采样速率
等);
D7将中断服务程序入口地址写入中断向量表:
;设置中断向量表 ;
22I%(=2'B*G'(C#-.%*("5&>;返回 S#-/G'( 型指针 S#-/G'(;;
22I%(L=3H >;3H : <'(% 中断服务程序 ;
;相对于中断向量表首地址的偏移 ;
;22I%(=T3$(>;3$(: 的中断服务程序 ;
()设置 针对该硬件的控制线
'7如果控制线可作 31(可编程 31)和控制信号用,则设置 内部对应寄存器使其作为
控制信号;
D7设置 内部的针对该设备的中断屏蔽位,设置中断方式(电平触发还是边缘触发)。
()提供一系列针对该设备的操作接口函数。例如,对于 ,其驱动模块应提供绘制像
素、画线、绘制矩阵、显示字符点阵等函数;而对于实时钟,其驱动模块则需提供获取时
间、设置时间等函数。
7 的面向对象化
在面向对象的语言里面,出现了类的概念。类是对特定数据的特定操作的集合体。类包含
了两个范畴:数据和操作。而 语言中的 $%(<8% 仅仅是数据的集合,我们可以利用函数指
针将 $%(<8% 模拟为一个包含数据和操作的“类”。下面的 程序模拟了一个最简单的“类”:
?-G./*G5'$$
?/*U.*5'$$$%(<8%