嵌入式软件中断系统的测试研究

时间:2022-08-23 03:03:31

嵌入式软件中断系统的测试研究

摘要:由中断引发的软件故障往往具有隐蔽性和随机性,因此嵌入式软件中断系统测试是嵌入式软件测试中的难点。该文对中断测试技术进行了研究,从静态和动态测试两方面总结了测试需关注的重点,通过使用文中的测试方法,发现中断系统中一些常见的问题。

关键词:中断;软件测试;静态测试;动态测试

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2015)28-0068-02

Research of Testing Technology for Embedded Software Interrupt System

DAI Xiao-qian, YOU Zhi-jian

(Shanghai Aerospace Electronic Technology Institute, Shanghai 201109, China)

Abstract:Because of the concealment and randomness of the problem caused by software interrupt, the thesting technology of embedded software interrupt system is difficult. This thesis study the testing technology of embedded system, it also summarizes the key point of testing technology from static and dynamic test. Common problems can be found through the test method used in this thesis.

Key words: interrupt; software test; static test; dynamic test

中断机制是嵌入式系统的重要组成部分,中断是指在程序执行过程中,遇到急需处理的某个事件时,暂时中止正在执行的程序,转而执行相应的事件处理程序,待事件处理完毕后,再返回断点处继续执行,或调度其他程序执行的过程。嵌入式软件的中断具有多种类型,从执行时间上划分包括偶发的和周期性的;从触发类型上划分包括内部中断和外部中断;从中断级别上划分包括高优先级中断和低优先级中断等。随着嵌入式系统在各领域的广泛应用,相应的软件也越来越复杂,随之带来中断系统的设计和使用的也日益复杂。与一般程序不同,中断处理程序的执行具有随机性和不确定性,因此相关软件中断部分的测试也比一般程序要复杂。中断问题比一般软件问题要更具有隐蔽性、偶发性。某些问题测试人员很难复进行复现,这给软件测试工作带来了很大的难度。本文从静态和动态两方面总结了嵌入式软件中断系统的测试技术,从而对提高相关软件的质量有所帮助。

1 静态测试技术

软件静态测试技术主要包括代码审查和静态分析。不同的芯片中断代码的设计也存在一定的差异,且中断处理代码存在的问题可能根据具体应用的不同而存在,因此静态分析工具一般不具备对中断代码存在问题的详细分析。因此对中断程序的静态测试技术主要还是采用代码审查方法进行。代码审查的要点主要包括以下几类。

1)中断资源冲突检查

中断资源使用冲突是中断使用中最有可能发生的问题。中断资源冲突检测主要对中断中使用的公共资源进行分析,包括全局变量、寄存器、缓存区域、标识等。检查的第一步是筛选出中断与主程序、中断与中断中均使用的公共资源。第二步是对这些资源的读写情况进行分析,每个资源在程序中的使用存在三种情况:只读、只写和读写,这三种情况在主程序、中断处理程序中都可能存在。通常,一个资源在中断和主程序或不同中断中均为只读,或者主程序只在中断未使能状态下对资源进行访问时,一般不存在冲突。而在主循环和中断中,或不同中断中进行了修改的资源则一般需要仔细分析冲突的可能。图1则描述了一个中断资源冲突案例。

图1中中断程序用于接收数据,接收完成之后置接收标志。主程序用于处理接收到的数据,处理完毕后清接收标志。接收第一帧数据接收完成后,主程序开始处理数据,如果在处理过程中又接收一帧新数据,则该数据会丢失不被处理。对共用资源进行冲突检测通常还需结合软件时序进行分析。

2)中断现场备份和恢复

中断处理程序执行会打断主程序,且主程序中发生中断的位置一般不固定,为了保护被打断的主程序现场,需要在中断程序开始处对主程序现场进行备份,并在出口处进行恢复。对中断程序进行代码审查时需要检查需要备份的资源是否都进行了备份。这些资源通常包含程序状态寄存器、与主程序共用的寄存器以及一些全局变量。中断处理程序在入口处会对这些资源进行压栈操作,而在出口则进行出栈操作。代码审查需要检查需要被保护的资源是否已经全部被保护,各资源入栈和出栈的顺序是否匹配。

3)中断优先级

各种不同的芯片对中断优先级的处理是不一样的,例如8051芯片只能设置高、低两种级别的中断;TI的F2812芯片则各中断源的中断优先级固定的;而ARM芯片的中断优先级则是可编程的。且有些芯片的中断是可嵌套的,有些芯片则不能嵌套。对中断程序的代码审查应考虑到各芯片的具体特点,例如对不可嵌套的中断,则需考虑高优先级中断被延迟的问题,即如果在低优先级中断执行时,高优先级中断到来,则高优先级中断被延迟执行,该延时是否满足设计的要求。而对于可嵌套的中断,则需要考虑低优先级的中断被高优先级打断后,共用的中断资源是否存在冲突。对于中断优先级可编程的芯片,代码审查时还需检查中断优先级的设置是否正确,低优先级的中断被延迟或打断后,是否满足设计的要求。

以上是对中断程序进行代码审查时,需重点检查的要点。当然代码审查还应根据具体应该包括其他一些方面,例如对有些安全性要求比较高的软件则要求对未使用的中断应设置跳转到陷进程序,以防止软件异常进入未使用中断时,能够进行复位防止跑飞。还有一些芯片的编译器会对内存访问进行优化处理,则中断和主程序的共用资源则需声明为volatile类型,使芯片每次从内存取数,防止内存和寄存器数据不一致引发问题。在对中断程序进行代码审查时,如果注意到以上几点,能够有效地减少代码中存在的问题,提高软件的质量。

2 动态测试技术

对中断程序的动态测试主要包括测试中断程序的响应时间和处理时间。中断响应时间是从触发中断到中断程序开始执行之间的时间,中断处理时间则是从中断开始处到结束处的执行时间。对于响应时间和处理时间的测试,主要是测试时间是否满足软件需求的要求。

软件只存在一个中断,或存在多个中断,但不会同时发生时,一般响应时间和处理时间可直接测试;当软件存在多个可同时执行的中断时,则很难直接得到中断的响应时间和处理时间。存在以下几种情况:

1)两个中断同时到来,则程序会先执行高优先级,则低优先级中断被延迟执行,因此其响应时间则应包括高优先级中断的处理时间;

2)程序执行一个中断时,另一个中断触发,但该芯片不支持嵌套执行,则第二个中断响应时间包括第一个中断的部分执行时间;

3)程序执行低优先级中断时,发生高优先级中断,且该芯片支持中断嵌套,则低优先级的处理时间应包括高优先级中断的执行时间。

测试人员一般需要得到中断最长的响应时间和处理时间,上述情况在动态测试时不一定能够测量到,因此测试人员可先测量每个中断单独发生时的响应时间和处理时间,再根据芯片特点和程序中断执行时序计算理论上的最长响应时间和处理时间。

动态测试时,还需考虑中断处理时间对主循环处理时间的影响。例如,一个程序,存在两个中断,每个中断的处理时间均为200ms,程序主循环要求500毫秒内执行完毕,不发生中断时主循环的处理时间为200ms。当在一次主循环执行过程中,只发生一个中断时,程序主循环执行时间满足要求,但如果两个中断均发生,则执行时间为600ms,不满足处理要求。尽管该事件可能很少发生,但程序仍存在潜在问题。

3 结束语

本文从静态和动态两方面总结了嵌入式软件中断测试技术,这些技术在实际的嵌入式软件测试工作中的应用可有效减少中断程序的错误。嵌入式芯片类型多种多样,应用场景也各不相同,因此这些技术在实际测试工作中也需要灵活使用。

参考文献:

[1] 孙丽明. TMS320F2812原理及其C语言程序开发[M].北京: 清华大学出版社,2008.

[2] LPC2106、2105/2104 USER MANUAL[Z]. 2003.

上一篇:采油厂财务管理内部控制中存在的问题及对策分... 下一篇:浅谈新会计准则下会计从业人员职业判断能力的...