嵌入式系统及其软件测试技术

  • 格式:docx
  • 大小:22.87 KB
  • 文档页数:8

嵌入式系统及其软件测试技术

嵌入式系统及其软件

1.1嵌入式系统

计算机自诞生以来便得到了快速的发展,加之网络技术的迅猛发展,更多的功能被加到了计算机的操作系统中,并导致其越来越大。然而,随着计算机的广泛应用,人们对计算机软件的质量提出了更高更严格的要求。为了适应各种多样的应用领域,考虑到系统的可伸缩性、可裁减性、灵活性,一种以计算机技术为基础、以应用为中心、软硬件可裁减、适应应用系统对可靠性、功能、成本、功耗、体积严格要求的专用计算机操作系统——EOS,即所谓的嵌入式系统便随之诞生。当前在对嵌入式计算机系统的诸多定义中,比较正式的是:以应用为中心,软硬件可裁减,并且符合应用系统对可靠性、功能、成本、功耗、体积严格要求的专用计算机操作系统。[16]

一般而言,嵌入式系统为非PC系统,其由硬件和软件两部分组成。处理器、存储器、图形控制器、外设器件和1/0端口等属于硬件部分。而操作系统软件和应用程序编程则属于软件部分,操作系统软件又包括了要求实时和多任务操作。

通常,嵌入式是面向特定应用的。就所谓的嵌入式系统而言,其是将先进的计算机系统、电子技术、半导体技术与不同行业的具体应用相结合而得的产物。这也决定了其必然是一个技术资金密集、不断创新、用途广泛的知识集成系统。

1.2关于嵌入式系统及其软件的相关特点

较之通用操作系统而言,嵌入式操作系统具有如下特征:

1)小巧。基于嵌入式系统所提供资源的有限性,嵌入式操作系统必须小巧才能满足对应硬件的限制。

2)实时性。现在,大部分EOS都有RTOS内核,windowsCE,Linux的实时性较弱,经改进后的Limix系统的实时性变得很强,如Rl-Limix。[17] 3)强稳定性与高可靠性。操作系统上的应用程序能否得以顺利且可靠的运行

关键在于任务管理与调度策略。

4)移植性好。大多数EOS均可在多种嵌入式处理器中应用,如MPU、DSP、MCU、PPC、ARM等。[18]

5)可裁减。根据应用需要,EOS可以进行裁减,亦或去掉多余部分,亦或简化相应模块。[20]

6)可固化代码。鉴于EOS有限的存储空间,无论是操作系统代码还是应用软件代码往往均需要被固化在系统的ROM。[21]

采用专为特定用户群设计的专用的嵌入式CPU,通常具有体积小、功耗低、集成度高等特点。

通常而言,EOS的专用性和算法唯一性均为完成某项特定任务而设计,设计一旦完成便不再发生改变,其在市场中的生命周期一般较长。

软硬件之间的相互配合与依赖,在设计初期,软件和硬件二者就相互配合,依赖性很强,旨在提高效率、减少资源浪费。

结构简洁紧凑,鉴于硅片的容量相当有限,欲在其上实现特定的功能就要求其结构尽可能的紧凑。

一般而言,大部分嵌入式系统为实时控制系统,多用于特定任务:例如军工产品、工业控制、通信设备等,对实时性的要求很高。

关于嵌入式软件的相关特点:

嵌入式软件就是针对特定的实际专业领域的,以相应的嵌入式硬件为基础的,可完成用户预期任务的一种计算机软件。较之通用软件而言,嵌入式软件有以下几种特征:

(1)实时性

实时性,也即必须满足时间的约束。就实时软件的处理速度来讲,其并不见得都很快,准时和及时才最重要。[22]譬如,它们时间特性的可预见性。对实时软件的正确性起决定作用的因素不仅包括系统的功能和行为特性,还包括系统的时间特性。时间特性是实时软件区别于非实时软件的一个重要方面,它对实时软件的成功与否起到了关键的作用。而软件或其进程的时间约束往往是实时软件的时

间约束的主要表现,一般,按照满足严格时间约束的软件或者进程来分,实时软件可分为实时软件和实时进程两种。[23]

(2)嵌入性

嵌入性表明了嵌入式软件之开发环境与运行环境不一致。一般情况下,嵌入式软件在宿主机上开发,但在目标机上运行。

(3)反应性

嵌入式系统也被称作是反应式系统,故其也具备反应性。反应式系统中,与环境保持同步关系且交替经历两周周期的进程构成了它的软件。进程的两周周期为:等待周期和反应周期。[24]一般而言,存在于反应式系统的行为均为无限的,故其进程往往也都无休止地、不间断地响应着来自环境的激励。这样以来,只能用输入/输出序列的二元组来描述反应性软件的行为。[25]

(4)专用性强和硬件依赖性

由于嵌入式软件总是在针对特定应用领域的特定目标环境下运行,故其功能专一,专用性很强。另外,嵌入式软件需要在硬件的辅助下运行,所以,软件与硬件有着密不可分的联系,换句话说,也即嵌入式软件的硬件依赖性也很强。然而,嵌入式软件专用性强和硬件依赖性两特性无疑也给其软件测试带来了挑战。

[26]譬如,怎样界定软硬件的错误,无论是硬件特性还是测试所需的硬件信号驱动以及响应等均需要在软件测试预于考虑。

(5)小型化

尽管我们不断提高了处理的速度,也不断增加了存储器的容量,但在大部分的应用中,存储空间仍显得十分宝贵,鉴于此,要不断提高程序质量,以求减少程序代码长度。

(6)新的任务设计方法的引入

嵌入式应用的基本执行单元以任务计算。系统设计时采用数个并发的任务替代通用软件的多个模块,同时也给出了应用软件任务间接口的定义。 [27]DARTs(DesignandAnalysisofReal一Timesystems)的设计方法是嵌入式系统在设计任务时通常采用的方法。DARTS也给出了划分系统任务的方法和任务间接口

的定义机制。[28]

(7) 需要对开发完成后的嵌入式软件进行固化及固化测试

通用软件的开发可在其测试完成后直接投入运行,但嵌入式软件则有所不同,在目标环境下必须将嵌入式软件存储在非易失性的存储器之中,以此来确保用户关机后下次的使用。故,在完成了对嵌入式软件的开发之后,还应将其固化,并烧写到目标环境下的ROM中运行。[29]

鉴于嵌入式软件开发调试完成后的运行环境往往包含监视器等调试附加程序,而这些额外代码又不存在于固化的二进制执行代码中,因此,为保证固化程序正确及安全的运行,在固化之后要对嵌入式软件进行固化测试。

1.3嵌入式软件开发模式

通常,嵌入式系统不提供软件的开发环境(即所谓的宿主机环境),而只提供软件执行环境(即所谓的运行环境),这便是嵌入式系统的嵌入性特点。[29]此外,嵌入式系统一般都资源受限,也即嵌入式系统的CPU、通信资源、存储器都恰到好处,这明显区别于会给用户预留许多资源进行选择的通用PC。这也决定了必须要有一套能够提供专门的设计、编译、调试、测试工具的专门的开发环境来对嵌入式软件进行开发。嵌入式系统开发有其自身的特点。一般先对硬件部分进行开发,包括形成裸机平台,移植实时操作系统,对底层的硬件驱动程序进行开发等。只有在硬件平台测试通过以后才开始应用软件的开发。而应用软件的开发调试既是对硬件平台的一个测试,又是基于该硬件平台进行的。[35]如下图2-1表示的是整个嵌入式系统开发流程。因此,嵌入式系统的开发过程也可以理解为是一个软硬件相互协调,相互反馈及相互测试的过程。一般来说,在嵌入式系统软件中,底层驱动程序、操作系统和应用程序的界线是不清晰的,根据需要甚至混编在一起。这主要是由于嵌入式系统中软件对硬件的依赖性造成的。[40] 图 0-1 嵌入式系统开发流程

嵌入式软件的开发环境和运行环境往往互相分离,即采用交叉开发的方式:开发工具及编辑和编译软件运行在宿主机上,我们需要将编译好的软件下载到目标机上,利用通讯连接起主机和目标机,并在二者间进行调试命令和数据的传输。如图2-2。[36]而嵌入式软件开发的复杂性也基于主机和目标机操作系统的不同和

处理器体系结构的不同而被大大提高。

图 0-2 嵌入式的交叉开发方式

PC机和工作站等通用计算机都可以作为宿主机,它通过网络连接或串口与目

标机进行通讯。宿主机拥有比较丰富的软硬件资源,如功能强大的操作系统(如

Linux和windows),[38]再如各式各样的开发工具(如Microsoft的Embedded visual

c++、WindRiver的Tornado等),软件开发的效率和进度也基于这些辅助开发工

具而大大提高。[42]

在嵌入式软件开发期间,为了与宿主机相区别,常常使用目标机(Target)这个术语。嵌入式系统软件在目标机这一硬件平台中运行。在目标机上运行的软件基于目标机有限的硬件资源既可剪裁,也可配置。因此,目标机通常都集成度高、体积较小,甚至软硬件资源配置都恰到好处。另外,如要使得目标机应用软件顺利运行还需绑定操作系统。为达到缩短开发周期减少开发的费用的目的,可不断增强宿主机的配置,甚至在宿主机上仿真目标机。[37]

嵌入式交叉开发需要用到交叉编译器、交叉调试器和系统仿真器等交叉开发工具。其中交叉编译器的功能是在宿主机上生成代码且该代码能够在目标机上运行,而交叉调试器和系统仿真器的功能则是完成宿主机与目标机之间程序代码调试。在宿主机上运行的交叉调试器能够通过网络连接或串口与目标机通讯,通过使用调试器调试人员可以与目标机端的Monitor协作,从而将要调试的程序下载到目标机上进行运行和调试。[41]

与通用软件开发相比,嵌入式软件开发的不同之处还体现在以下方面:

(l)包括特定的外围设备和微处理器等在内的专门的硬件平台是嵌入式软件开发的前提之一。此外,软硬件的开发在嵌入式系统中通常是同步进行的,也就是说,开发者在开发初期要面临硬件平台不确定的状况。

(2)底层嵌入式操作系统(RTOS)也是嵌入式软件开发的另一前提,其专门的RTOS可以作为任务调度平台来调度复杂的实时多任务程序,同时在开发过程中,附带于RTOS的集成开发环境(IDE)以及应用程序接口(API函数)也需要被用到。

(3)在遵循传统软件开发模式的基础上,嵌入式软件开发还需要某些专门的开发工具,如在嵌入式软件中起创建和调试作用的编译器、汇编器和调试器。

(4)考虑到软件的运行性能,可供嵌入式软件选择的编程语言范围很是有限。现有的如Java、Ada、 C++等高级的面向对象的编程语言虽然在某种程度上可通过增强系统设计而有利于构建与维护复杂的系统,但动态对象概念的引入也额外地影响着系统运行的效率。软件开发中,可根据具体的应用需求或具体的问题来选择编程语言。设计诸如传感器通信等中小型但执行关键任务的高效的实时应用,采用C语言最好;Java语言适于用来设计对实时性要求不高但要与用户有良

好接口与Internet连接的设备;对于如飞机、军舰等大规模、分布式的嵌入式系统应用,C++,Ada语言可作为选择的对象。

(5)开发资源,如成本、功耗、体积等,严格制约着嵌入式软件的开发。开发者不得不去面对目标平台存储能力和处理速度有限的事实,并尽可能满足来自应用的功能和非功能的要求。

1.4嵌入式软件三大特点对软件测试的影响

1.4.1实时性的影响

嵌入式软件测试需要满足实时性要求。一般而言,嵌入式软件的运行都是连续的,其会实时地响应外部触发的事件,从而满足时限要