本帖最后由 zlg315 于 2011-2-16 15:17 编辑
架构的前提软件要进行准确地分层设计,层与层之间的接口规范制定以及如何降低它们耦合度,这些才是关键。
原则上,简单的嵌入式软件可以分为设备驱动程序、虚拟驱动程序与应用程序,设备驱动程序只负责与硬件有关的部分,而与硬件无关的部分将放到虚拟驱动程序之中。比如,数码管扫描程序(省略了其它文件,如驱动配置文件)
设备驱动程序:
extern void LedDisplayScant(void); // 输入参数与返回值:无
虚拟驱动程序:
extern char Virshowputs(char *pcStr); // 输入参数:pcStr——要输出的字符串,返回值:0——成功,-1——失败
在前后台中仅需将上述函数名改为“extern LedDisplyputs(char *pcStr); ”,代码完全一样。
清屏程序也很简单,比如:
char LedDisplayClr(void)
{
memset(GucLedDisplayshowBuf, 0, 6); // 将显示缓冲区清0
} // 函数原型:void *memset(void *s, int ch, unsigned n);
当然,不要在这些代码中使用定时器中断等,如果需要使用定时器中断,那么,只需要另外再加2个函数即可。比如:
extern void time0ISR(void) _interrupt1;
extern void time0Init(void);
最后再写一个测试用例,比如:
void main(void)
{
LedDisplayInit(); // 显示器初始化
time0Init(); // 定时器初始化
EA = 1; // 允许中断
LedDisplayPuts("60.7-5.9"); // 显示字符串
while(){
}
}
当然,在某些情况下,前后台的程序移植到OS中,还需要作稍许的修改,这也是无法避免的,但工作很少。
由于学习任务繁重以及工作太忙,因此,没有太多的时间及时参与大家的讨论,敬请谅解!谢谢。
|