计算机应用 | 古代文学 | 市场营销 | 生命科学 | 交通物流 | 财务管理 | 历史学 | 毕业 | 哲学 | 政治 | 财税 | 经济 | 金融 | 审计 | 法学 | 护理学 | 国际经济与贸易
计算机软件 | 新闻传播 | 电子商务 | 土木工程 | 临床医学 | 旅游管理 | 建筑学 | 文学 | 化学 | 数学 | 物理 | 地理 | 理工 | 生命 | 文化 | 企业管理 | 电子信息工程
计算机网络 | 语言文学 | 信息安全 | 工程力学 | 工商管理 | 经济管理 | 计算机 | 机电 | 材料 | 医学 | 药学 | 会计 | 硕士 | 法律 | MBA
现当代文学 | 英美文学 | 通讯工程 | 网络工程 | 行政管理 | 公共管理 | 自动化 | 艺术 | 音乐 | 舞蹈 | 美术 | 本科 | 教育 | 英语 |

基于PSOS的TM1300应用系统中的BSP研究(2)

2017-02-15 01:02
导读:一般情况下,BSP对板卡中每个芯片的操作都通过多个函数来完成。如果应用程序对板卡的操作都直接通过调用BSP中的函数来完成,那将很不利于源

一般情况下,BSP对板卡中每个芯片的操作都通过多个函数来完成。如果应用程序对板卡的操作都直接通过调用BSP中的函数来完成,那将很不利于源程序的调试。更重要的是,应用程序的可移植性会降低,如果硬件作了修改,应用程序可能也得做一定的变动,这样就不能达到有效使用BSP的目的。所以,本文提出把能完成某个特定功能的函数封装在一个库文件中,并放在应用程序与BSP之间。这样,应用程序通过调用少量的库函数就可控制硬件以实现不同的功能。当底层硬件变动时,只需修改底层实际执行的函数及相应的库函数,而应用程序基本不必修改,从而缩短了开发周期。

另外,BSP中有对各个外围芯片操作的多个函数。因此,针对一个可升级的系统,如何高效地管理这些函数就显得尤为重要。在SDE2.2开发环境中,它采用一个称为注册表的模块来管理这些函数。该模块的内部结构对开发人员是透明的,它的功能就是将BSP 中的函数进行注册,当其他程序需要调用这些函数时,可通过检索注册表来完成。

2.1 编写BSP函数

对每个芯片来说,都应当有初始化函数,且都有为实现不同功能而对各寄存器设置的函数及读取各状态寄存器内容的函数等。在初始化函数中,要完成对各个配置寄存器的初始化设置以使其能在缺省状态工作。根据应用程序对硬件的不同要求,配置函数应能完成各种功能,如工作方式的调整、中断设置、寄存器设置等。而状态读取函数可以获取各个芯片当前的状态并返回给应用程序。由于在这些底层函数中要用到大量的位运算,所以建议在头文件中多使用宏定义以增加程序的可阅读性。为了利用上述思想,这里所有的函数名都使用函数指针变量来表示。

2.2 每个芯片定义一个结构体

在该结构体中,一般首先定义对该芯片操作的各函数的函数指针,再定义对应的结构体变量,然后将各函数添加到该结构体变量中。这样,关于每个芯片的函数都包含在各自的结构体中,便于程序的阅读、调试及维护。

编译连接产生myboard_bsp.o文件时,可用此文件替换开发系统中Trimedia安装目录下tmconfig熚蘩┱姑犖募中对BSP的指定,也可以在编译应用程序时特别指定。

为了保持BSP对用户应用程序的透明性,设计时应定义相应的库函数。如打开SAA7113芯片的函数SAA7113.OPEN煟牐关闭该芯片的函数SAA7113.CLOSE煟牭取R话闱榭鱿拢用户应用程序通过调用库函数来实现对该芯片的操作而不关心底层如何工作。因而需要在库函数中定义一个同样类型的结构体变量指针。在库函数中,应在注册表中检索前面对应的结构体重对应函数指针,并将该地址赋值给库函数中定义的该结构体的函数指针变量,这样,就可通过调用相应的BSP函数和进行必要的中断操作来完成其功能。

在应用程序执行过程中,如果需要对硬件进行操

上一篇:液化石油气低NOx燃烧技术探讨 下一篇:没有了