UC/OS_II在浮点DSP上的移植和测试

2009-08-25 09:37李文新曹觐姝
新媒体研究 2009年15期
关键词:移植测试

葛 莹 李文新 许 珩 曹觐姝

[摘要]市面上的嵌入式操作系统种类繁多,UC/OS_II由于其简单易学,注释清晰,范例丰富,受到了广泛的喜爱。详细介绍UC/OS_II在浮点DSP TMS320VC33

上的移植过程,即数据类型转化成编译器能编译的数据类型,设计UC/OS_II与DSP硬件接口,设计硬件抽象层函数,深入到底层细节。移植工作结束后还进行测试,测试结果证明UC/OS_II是一种稳定可靠的实时操作系统。

[关键词]嵌入式实时操作系统 DSP 移植 测试

中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)0810014-02

一、引言

UC/OS_II是一种源码公开的占先式实时多任务操作系统,其大部分编码都是由ANSI C编写的,小部分与硬件相关的内容是由汇编写成的,具有操作系统的基本功能,并有可剪裁,可移植性很高的特点。TMS320VC33是TI公司生产的高性能浮点DSP芯片,功能强大。本文针对UC/OS_II在TMS320vc33上的移植,着重讨论了堆栈保存与恢复及任务切换等核心问题的分析与实现。UC/OS_II的基本结构比较明了,改写的移植代码都是和硬件处理器和编译器相关的。

二、移植过程的设计和实现

移植分为DSP硬件驱动模块和操作系统与DSP接口模块两部分。在DSP硬件驱动模块中主要包括中断向量,硬件初始化和时钟初始化。操作系统与DSP接口模块包括UC/OS_II数据类型移植,任务堆栈的设计和操作系统与DSP硬件的接口函数。

(一)数据类型重定义

在此文件中应该先完成数据类型的重新定义,堆栈数据类型的定义,堆栈增长方向的定义,临界区开关中断的方法,任务切换函数OS_TASK_SW的宏定义,数据类型声明。

UC/OS_II访问代码临界区时首先要禁止中断,并且在访问完毕后重新允许中断。有三种方式可以实现,这里只能用通过状态寄存器中的中断使能位开关中断的方式。

Cregisterunsigned int ST;

#defineOS_ENTER_CRITICAL();asm(“ANDN 2OOOH,ST”);

#defineOS_ENTER_CRITICAL();asm(“OR 2OOOH,ST”);

(二)改写OSTaskStkInit()函数

OS_CPU_C.C中主要完成的是OSTaskStkInit()函数。此函数完成任务栈的初始化,使得任务栈的结构看起来如同在任务执行过程中发生过一次中断,并将所有寄存器保存到堆栈一样。CCS函数调用时的堆栈规则为:先将参数从左往右入栈,然后是函数返回地址入栈。按照此规则设计任务栈结构。VC33有28个寄存器,程序中应将寄存器全部入栈。

(三)OS_CPU_A.ASM

在此文件中要求用户编写四个汇编函数OSStartHighRdy(),OSCtxSw(),

OSIntCtxSw(),OSTickISR(),这四个函数具有公共部分:寄存器入栈和寄存器出栈。主要按照上面设计好的栈结构进行就好了。

函数OSIntCtxSw()具有特殊部分,该函数用于从中断返回时进行任务切换,此处不再进行寄存器保存。同时还要进行指针的调整,去掉堆栈中一些不需要的内容,然后将寄存器全部出栈。

(四)时钟中断函数OSTickISR()伪码如下

Void OSTickISR(void)

{

保存现场;

OSIntEnter();//DSP要求速度,用OSIntNesting++;代替

如果中断嵌套层数是1则OSTCBCurOSTCB_StkPtr=当前SP;

OSTimeTick();

OSIntExit();

回复最高优先级任务的现场;

}

三、测试

软件测试在软件开发过程中是必不可少的,其重要程度不容忽视。历史上曾出现过由于软件错误而导致整个系统失败的教训。软件测试的工作量往往占软件开发总工作量的以上。测试步骤一般分为单元测试、集成测试、系统测试的步骤。

(一)单元测试

必须先通过编译程序检查,并且改正所有语法错误,采用白盒测试法,分析系统服务的逻辑结构、选用测试用例,尽可能实现条件覆盖,分支覆盖。

(二)集成测试

在单元测试之后,完成一定的功能时,可能会出现一些新的问题如跨越系统服务接口的数据是否会丢失全程数据结构是否会有问题产生的数据是否会被冲掉等等。这里采用了以下两种方法:

等价类划分法:等价类划分是集成测试中的主要方法。穷尽的黑盒测试需要使用所有有效的和无效的输入数据来测试程序,通常这是不现实的。因此选用最有代表性的输入数据,以期用较小的代价暴露出较多的错误。

边界值分析法:边界值分析同样是集成测试中很重要的方法。这是一种根据等价类边界上或紧靠边界的条件,选择测试用例的更有效的方法。

测试过程中,在修改软件错误后都进行了回归测试,以发现是否会因系统的修改而带来新的错误。

对嵌入式实时操作系统UC/OS_II的测试结果统计见图1。

四、测试结论

1.EKnots节点过多将增加程序复杂性,UC/OS_II的程序基本节点度量为0,证明此操作系统内核为完全结构化程序。

2.EV(G)指通过结构化流程简化后,圈复杂度用于表示程序复杂性,这里的圈复杂度测量值为4,正常范围为0到500之间,复杂性不高。

3.结点度量用于表明程序实施时附加复杂性,由于操作系统结构特性导致系统节点数较大。但不影响系统正常功能与使用。

4.测试结果综述,此操作系统可测试性好,易于维护,结构比较清晰。

UC/OS_II操作系统本身是非常稳定的,具有高可靠性。因其可裁剪性,内核占用空间小,是理想的嵌入式实时操作系统之一。有广泛的利用价值和前景。

嵌入式系统是一个不断发展的过程,相信随着科技的进步,存在的部分问题也一定能够得到妥善地解决。UC/OS_II实时操作系统将会用在越来越多的方面,它的性能也会越来越完善。

参考文献:

[1]钟坚文、蔡旭,基于UC/OS--II的CAN总线驱动程序设计,计算机信息,2005(7-2):35-37.

[2]Jean J.Labrosse著,邵贝贝等译,嵌入式实时操作系统UC/OS-Ⅱ[M].第2版,北京:北京航空航天大学出版社,2003.5.

[3]刘和平、王维俊等,TMS320LF240X DSP C语言开发应用,北京:北京航空航天大学出版社.

[4]沈绪榜,嵌入式计算机系统的展望,《单片机与嵌入式系统应用》,2001.1.

[5]窦振中,嵌入式系统设计方法的演化从单片机到单片系统,《单片机与嵌入式系统应用》,2001.2.

[6]蔡建平,关于嵌入式应用开发技术,《单片机与嵌入式系统应用》,2001.3.

[7]何小庆,嵌入式实时操作系统的现状和未来,《单片机与嵌入式系统应用》,2001.3.

[8]马忠梅,《嵌入式应用设计模式》,《单片机与嵌入式系统应用》,2001.1.

作者简介:

葛莹(1983-),女,空间技术研究院510研究所,硕士研究生,研究方向:嵌入式操作系统;李文新(1969-),男,西北工业大学,研究方向:嵌入式软件开发。

猜你喜欢
移植测试
心理测试
基于FreeRTOS系统和LwIP协议栈的网络通讯
西方音乐元素在二胡演奏中的移植
“移植”瘦人粪便能减肥?
心理小测试
测试
小测试:你对电子邮件上瘾了吗?