基于PSOS的TM1300应用系统中的BSP研究
2.2 每个芯片定义一个结
构体
在该结构体中,一般首先定义对该芯片操作的各函数的函数指针,再定义对应的结构体变量,然后将各函数添加到该结构体变量中。这样,关于每个芯片的函数都包含在各自的结构体中,便于程序的阅读、调试及维护。
编译连接产生myboard_bsp.o文件时,可用此文件替换开发系统中Trimedia安装目录下tmconfig?无扩展名?文件中对BSP的指定,也可以在编译应用程序时特别指定。
为了保持BSP对用户应用程序的透明性,设计时应定义相应的库函数。如打开SAA7113芯片的函数SAA7113.OPEN??,关闭该芯片的函数SAA7113.CLOSE??等。一般情况下,用户应用程序通过调用库函数来实现对该芯片的操作而不关心底层如何工作。因而需要在库函数中定义一个同样类型的结构体变量指针。在库函数中,应在注册表中检索前面对应的结构体重对应函数指针,并将该地址赋值给库函数中定义的该结构体的函数指针变量,这样,就可通过调用相应的BSP函数和进行必要的中断操作来完成其功能。
在应用程序执行过程中,如果需要对硬件进行操作,只需调用相应的库函数即可,库函数通过BSP函数指针实现对底层函数的调用。如果有必要,底层函数执行完后可返回硬件当前的状态。这样的结构不仅可减少应用程序代码,也可使应用程序的结构更加清晰。同时还可使整个操作流程层次分明,对BSP的维护也更加方便。当系统升级时,如果需要更改硬件的部分芯片,只需修改底层函数和所更改部分的函数即可。库函数也只需很少的更改,而应用程序不用更改或只需很少量的更改,这在很大程度上提高了应用程序的可移植性。
3 BSP结构在TM1300系统中的实现
对于本图像处理系统所能实现的功能,此处不再赘述,在该系统中,用本文所描述的方法能够很好地解决应用程序对底层硬件的操作。比如对其中的视频解码器,如果应用程序需要接收视频信号,只需调用视频解码器打开库函数,这样,该库函数即可通过注册表调用相应的底层函数来完成打开视频解码器等一系列对视频解码器的初始化工作。当视频解码器升级为同系列的其它芯片时,底层函数一般只需少量修改,而应用程序则基本不必修改即可正常工作。
4 结束语
本文提出的在应用软件与BSP之间加一层库函数同时配合使用注册表组织管理BSP函数的方法,较好地解决了应用程序与BSP函数间的数据传递问题,同时减少了BSP函数的维护复杂度。此外,该方法也为其它类型的嵌入式系统(VxWORKS等)的BSP设计提供了一个参考。
《基于PSOS的TM1300应用系统中的BSP研究(第2页)》