《基于PSOS的TM1300应用系统中的BSP研究.doc》由会员分享,可在线阅读,更多相关《基于PSOS的TM1300应用系统中的BSP研究.doc(4页珍藏版)》请在金锄头文库上搜索。
1、基于PSOS的TM1300应用系统中的BSP研究作者:曹诩承莫德举文章来源:21IC中国电子网摘要:通过在应用软件与板级支持包之间加一层库函数的方法较好地解决了应用程序与板级支持包函数间的通信问题,减少了板级支持包函数的维护复杂度,从而为嵌入式系统板级支持包的实现提供了一个有价值的思路。 关键词:PSOS;BSP;库函数板级支持包属于嵌入式系统的一部分,它相当于一个板级驱动程序,实际上也是用来描述运行于嵌入式微处理器上的软件与外围芯片之间接口的一个软件层。本文针对基于嵌入式操作系统的 多媒体应用系统卡,提出了一种 的函数组织方法。的核心是位处理器,能够进行位的线性寻址,寻址能力可达到。核心处理
2、器采用的是 超长指令字结构,可以在每一时钟周期内同时进行个操作,每秒可完成亿次指令运算。支持的数据高速缓存和的指令高速缓存,而且数据高速缓存是双端口的,允许同时双向接入。方便的接口允许其在主机()视频卡上显示图像。从来看,只有和单元可以对接口进行操作,而从来看,和绝大部分处于空间的寄存器都能够被外部初始化器件所访问。图像协处理器则可给活动视频提供一个用于显示支持的交迭窗口仲裁号码。使用串行总线来配置其外围器件,并可以在主从两种模式下工作。此外,它还拥有一个实时多任务单(或多)处理器操作系统内核,并采用基于优先级的任务调度方式,此外,它还支持可抢占的、以及基于时间片的调度策略。在系统中的地位 将
3、的模块化技术与板级支持包相结合可使把上层模块及应用软件与底层硬件分开,从而保证开发不受处理器及外围硬件更新的影响,而只需对 中的设备驱动程序做简单的改动即可使其适合于更新或全新的硬件。这在很大程度上减少了开发该系统多个版本的工作量。另外,由于把的内核与目标机硬件隔离开来,从而使操作系统内核完全与设备无关,保证了内核的稳定性,同时提高了应用系统的可靠性。对于视频接口中的部分,的位置可以由来代替,这一硬件上的改动将只体现在板级支持包的变化上,而其上层应用软件不受影响。包括一个或多个例程,可用来定义特定电路板上的外围芯片,以提供针对这些芯片的基本操作功能,并完成对外围芯片的初始化及各寄存器的设置等工
4、作,图所示是其系统结构。图中,一方面用于完成外围芯片的初始化;另一方面,在需要时改变各芯片的内部设置,从而使硬件按用户的要求工作于不同的状态。而应用程序、管理器及操作系统内核则通过来对卡硬件进行操作。 必须清楚: 与 - 是不同的。 包括了设备驱动只包含这些驱动的开关控制的 启动码、 配置码和访问硬件库(例如:在系统定时及安装中断句柄时所需的库)。它们是的一部分,而不是应用程序的一部分。 应当适合操作系统的配置(在中配置)。由于要把这些特定应用程序的配置参数编译到 内核中,所以,每次应用中都应该重新编译。而不可能用库来实现。的编写及实现一般情况下,对板卡中每个芯片的操作都通过多个函数来完成。如
5、果应用程序对板卡的操作都直接通过调用中的函数来完成,那将很不利于源程序的调试。更重要的是,应用程序的可移植性会降低,如果硬件作了修改,应用程序可能也得做一定的变动,这样就不能达到有效使用的目的。所以,本文提出把能完成某个特定功能的函数封装在一个库文件中,并放在应用程序与之间。这样,应用程序通过调用少量的库函数就可控制硬件以实现不同的功能。当底层硬件变动时,只需修改底层实际执行的函数及相应的库函数,而应用程序基本不必修改,从而缩短了开发周期。另外,中有对各个外围芯片操作的多个函数。因此,针对一个可升级的系统,如何高效地管理这些函数就显得尤为重要。在开发环境中,它采用一个称为注册表的模块来管理这些
6、函数。该模块的内部结构对开发人员是透明的,它的功能就是将 中的函数进行注册,当其他程序需要调用这些函数时,可通过检索注册表来完成。 编写函数对每个芯片来说,都应当有初始化函数,且都有为实现不同功能而对各寄存器设置的函数及读取各状态寄存器内容的函数等。在初始化函数中,要完成对各个配置寄存器的初始化设置以使其能在缺省状态工作。根据应用程序对硬件的不同要求,配置函数应能完成各种功能,如工作方式的调整、中断设置、寄存器设置等。而状态读取函数可以获取各个芯片当前的状态并返回给应用程序。由于在这些底层函数中要用到大量的位运算,所以建议在头文件中多使用宏定义以增加程序的可阅读性。为了利用上述思想,这里所有的
7、函数名都使用函数指针变量来表示。 每个芯片定义一个结构体在该结构体中,一般首先定义对该芯片操作的各函数的函数指针,再定义对应的结构体变量,然后将各函数添加到该结构体变量中。这样,关于每个芯片的函数都包含在各自的结构体中,便于程序的阅读、调试及维护。编译连接产生文件时,可用此文件替换开发系统中安装目录下无扩展名文件中对的指定,也可以在编译应用程序时特别指定。为了保持对用户应用程序的透明性,设计时应定义相应的库函数。如打开芯片的函数,关闭该芯片的函数等。一般情况下,用户应用程序通过调用库函数来实现对该芯片的操作而不关心底层如何工作。因而需要在库函数中定义一个同样类型的结构体变量指针。在库函数中,应
8、在注册表中检索前面对应的结构体重对应函数指针,并将该地址赋值给库函数中定义的该结构体的函数指针变量,这样,就可通过调用相应的函数和进行必要的中断操作来完成其功能。在应用程序执行过程中,如果需要对硬件进行操作,只需调用相应的库函数即可,库函数通过函数指针实现对底层函数的调用。如果有必要,底层函数执行完后可返回硬件当前的状态。这样的结构不仅可减少应用程序代码,也可使应用程序的结构更加清晰。同时还可使整个操作流程层次分明,对的维护也更加方便。当系统升级时,如果需要更改硬件的部分芯片,只需修改底层函数和所更改部分的函数即可。库函数也只需很少的更改,而应用程序不用更改或只需很少量的更改,这在很大程度上提
9、高了应用程序的可移植性。结构在系统中的实现对于本图像处理系统所能实现的功能,此处不再赘述,在该系统中,用本文所描述的方法能够很好地解决应用程序对底层硬件的操作。比如对其中的视频解码器,如果应用程序需要接收视频信号,只需调用视频解码器打开库函数,这样,该库函数即可通过注册表调用相应的底层函数来完成打开视频解码器等一系列对视频解码器的初始化工作。当视频解码器升级为同系列的其它芯片时,底层函数一般只需少量修改,而应用程序则基本不必修改即可正常工作。结束语本文提出的在应用软件与之间加一层库函数同时配合使用注册表组织管理函数的方法,较好地解决了应用程序与函数间的数据传递问题,同时减少了函数的维护复杂度。此外,该方法也为其它类型的嵌入式系统(等)的设计提供了一个参考。