应用仿真的方法对实时嵌入式软件进行脱离硬件环境的测试,构造适用于仿真环境的被测软件运行环境,提出了适用于不同运行环境的测试模型。
1、引言
在国内,目前大型的软件工程中大都使用国外的软件测试平台,我们在测试工程中使用法国的LOGISCOPE测试平台对C语言开发的实时嵌入式软件进行测试。
由于实时嵌入式软件主要是对外部接口设备进行控制,而被送检的软件需要大量不同的硬件环境,在进行测试时,由于无法建立大量不同的接口设备的硬件仿真环境,每当执行输入输出指令时,程序便无法继续运行,因此,测试软件无法完整地覆盖整个程序的各个分支和语句。
同时,被测试软件常常需要多个模块同时对某个外设进行共同测试,需要通过网络环境进行集中测试。
&nbs
本课题的意义在于建成一种通用的方法,使得不同软件开发的程序都能够使用这些功能模块与接口仿真软件进行通信,从而顺利地进行软件测试。
被测软件的运行环境绝大多数是基于DOS的,在仿真环境下进行测试时,由于原来的硬件环境不再存在,因此要求对被测软件进行相应的修改CONTROL ENGINEERING China版权所有,使其在一个新的系统模型当中运行:原来与硬件进行I/O的指令,变成对仿真软件通讯动态链接库中函数的调用;由硬件触发的中断信号变成来自仿真软件的消息;更重要的是,原来由CPU负责调度的中断服务函数必须由新的模型来负责(因为不再有硬件中断信号),而由于DOS是一个单任务的操作系统,系统模型需要解决以下的问题:系统如何在程序运行的时刻检测到通过网络发过来的“中断信号”,如何中断当前的程序,去执行相应的中断服务函数www.cechina.cn,如何具有中断嵌套的功能。
基于以上要求,系统模型采用以下两种:
1、基于DOS的多任务调度系统模型
2、基于Windows多线程环境的系统模型
2.基于DOS环境的多任务调度模型
2.1实现原理
想要在DOS环境下实现多任务调度,必须使每个任务具有自己的堆栈。首先,栈用来实现任务切换,其次,它用来存贮任务的局部变量。
任务的切换是通过调用一个子程序来实现的,该子程序将堆栈指针由原来指向老任务的堆栈置为指向新任务的堆栈。程序返回时,新的任务指令指针(IP)就从栈中弹出。新任务就开始自动开始执行。
这个负责调度的子程序是通过时钟中断来定期触发的。当产生时钟中断时,需要做两件事情。首先,将标志(Flags)寄存器的内容压入栈中,其次,紧跟在指令指针(IP)之后,将CS(代码段)也压入栈中。最后,将中断服务子程序的段地址装入CS寄存器中,将偏址装入IP寄存器中.这样可以使ISR开始运行.中断返回时,CS,IP和Flags寄存器的内容自动弹出。为了实现任务的调度,新的时钟中断服务函数要完成两项工作。首先,它将除了栈指针(SP)和栈段(SS)寄存器之外的所有寄存器的值都存到栈中。(SP和SS的值存在另外的位置)。其次,它改变SS和SP寄存器的值,使它们指向另一个任务的堆栈。因此,当ISR返回时控制工程网版权所有,新的任务的堆栈被弹出到各寄存器中,这使得机器的状态是针对新的任务