1、第十章 调试技术,嵌入式系统软件教程 David E Simon著 陈向群 等译 机械工业出版社,通常嵌入式系统对可靠性要求很高。 嵌入式系统失效可能会导致灾难性后果。 嵌入式应进行严格的测试、确认和验证。,嵌入式系统测试和调试的特点(1): 嵌入式软件开发有别于桌面软件系统开发的一个显著的特点,是它一般需要一个交叉编译和调试环境,即编辑和编译软件是在主机上进行(如在PC机的Windows 操作系统下),编译好的软件需要下载到目标机上运行,主机和目标机建立起通讯连接,并传输调试命令和数据。 由于主机和目标机往往运行着不同的操作系统,而且处理器的体系结构也彼此不同,这就提高了嵌入式开发的复杂性。
2、总的来说,嵌入式开发所面临的问题主要表现在:涉及多种CPU和多种OS;开发工具种类繁多,等等。,嵌入式系统测试和调试的特点(2): 有嵌入式系统开发经验的工作人员都知道,嵌入式系统中调试和测试这两个概念其实没有严格的界限,有时候调试和测试过程是同时进行的。如果测试出现问题,就立即进入了调试。 现在许多大型的嵌入式厂商都开始将软件调试工具集成到一起。更有甚者可能将软件和硬件的调试和测试工具都集成到了一起。 从交叉调试的技术实现途径以及它的应用情景两个角度看,它通常可以分为“硬件级调试工具及技术”和“源码级软件调试工具技术”两大类。,10.1 在宿主机上进行测试 在开发平台上进行嵌入式软件的测试。
3、要建立测试支架程序; 必须让测试支架程序执行中断程序; 直接调用时钟中断程序等等。,工程师通常反对在开发平台上测试嵌入式系统的软件。原因: 嵌入式系统软件非常依赖于硬件;创建一个测试支架非常麻烦;需要在主机上运行RTOS;在主机上不能对很多重要的软件特征进行测试,这包括:(1)软硬件的交互;(2)响应时间和吞吐量;(3)共享数据问题;(4)可移植性问题。,10.2 指令集模拟器 在宿主机上进行测试的缺点,可以通过指令集模拟器来解决。 模拟器可以在主机上模拟目标机的微处理器和内存的行为。 为了使用模拟器,需要通过交叉编译器和链接器/定位器来构建软件,就像为真正的目标系统编译链接一样;然后,把编译
4、链接结果下载到模拟器中。,10.3 assert 宏 assert 宏是应用软件程序员所使用一项很好的技术,但是应用到嵌入式系统中有些麻烦。,10.4 使用库工具 嵌入式系统的开发过程是:先硬件,后软件;测试和调试的顺序也应该是先硬件,后软件。所以我们的讲解就按照这个顺序。,10.4 .1 伏特表和欧姆表 万用表、伏特表和欧姆表用来检查硬件工作是否正常。 据不完全统计,在嵌入式硬件设计初期,有一半以上的错误竟然是用小小的万用表检测出来的。,10.4 .2 示波器 示波器是用于图形化显示电压随时间变化的设备。示波器是一种逻辑分析设备,它不仅仅检测信号是高是低,还检测信号的真实电压。 示波器可能是
5、基本调试辅助工具中最强大的一个,示波器能够让你看到你的程序对外部端口和外设的访问,并能够监视软件的活动。 在嵌入式系统的板级硬件设计过程中,功能最多但是最原始的工具就是示波器(Oscilloscope)。它几乎可以做任何事情。例如,查看目标机与外部世界的交互过程,监视目标板内部电路上的信号,查看总线上的时序关系等等。,10.4 .3 逻辑分析仪 逻辑分析仪是一种类似示波器的波形测试设备,它可以监测硬件电路工作时的逻辑电平(高或低),并加以存储,用图形的方式直观地表达出来,便于用户检测分析电路设计(硬件设计和软件设计)中的错误,逻辑分析仪是设计中不可缺少的设备,通过它,可以迅速地定位错误,解决问
6、题,达到事半功倍的效果。 逻辑分析仪可以同时跟踪很多信号,但是只报告两种电压:VCC和地。,10.4 .4 在线仿真器 在线仿真器(In-Circuit Emulators, ICE)是嵌入式系统领域使用得最多的调试器之一。 在线仿真器是一个用来设计其他计算机系统的计算机,它代替了物理目标机上的处理器或微控制器,其表现与被代替的目标机处理器完全一样,但是它允许用户查看处理器内部的数据或代码并控制CPU的运行。 比较常见于单片机调试中。,10.4 .5 片上调试器 随着现代的微处理器封装越来越表贴化,仿真器探头的实现也就越来越困难。为了实现主机与目标机处理器的片上调试逻辑之间的连接,可以用一块简
7、单的信号转化电路板来匹配主机通信接口(例如,RS-232串口和并口)与目标机CPU的串行调试接口。 与ICE或逻辑分析仪相比,片上调试器不存在任何因CPU封装或CPU速度而带来的问题。CPU与调试器之间的连接问题也不存在,因为调试器只占用几根专用的CPU引脚。通过片上调试逻辑实现的运行控制,可以对目标机CPU进行设置断点、单步执行以及资源读/写访问等绝大多数的基本调试活动。,10.4 .6 ROM监视器 ROM监视器(是监控软件) 所谓ROM监视器就是指一段驻留在目标机的ROM或FLASH中的小程序,它可以在开发过程中辅助用户测试与调试他所编写的嵌入式程序。它可以完成以下功能:显示和修改系统内存中的当前内容;显示和修改系统微处理器的寄存器内容;具有简单的软件断点功能,包括在用户程序中设置断点并运行用户程序直到断点也能单步运行用户应用程序。,10.4 .7 JTAGJTAG代表联合测试小组。但是现在JTAG端口广泛用作调试软件的微处理器的“后门”。 从主机上连出的电缆连接到目标微处理器的JTAG引脚上,主机上的程序通过该电缆控制目标机无微处理器。,本章小结:嵌入式系统结构及功能的特点决定了对其进行测试与调试的特殊性。 对嵌入式系统硬件进行测试与调试可借助于一系列的工具。 对嵌入式系统软件进行测试与调试要很大程度上依赖于交叉调试环境。,