转载自 http://www.shangxueba.com/jingyan/97515.html
1.CodeTest 概述
CodeTest是嵌入式系统测试工具,同时也能做嵌入式部分模块测试。要求:目标板和操作系统能正确运行
2.CodeTest 的4大功能
(1) 性能分析:CodeTest 能同时对128000 个函数和1000 个任务同时进行性能分析,可以精确的得出每个函数或任务执行的最大时间 、最小时间和平均时间,精确度达到50ns;能够精确的显示各函数或任务之间的调用情况,帮助你发现系统瓶颈、优化系统和提升你的系统性能。
(2) 测试覆盖率分析 :CodeTest 提供程序总体概况,函数级代码以及源级覆盖趋势等多种模式来观测软件地覆盖情况。由于 CodeTest 是一种完全地交互式工具,测试者可以在对系统进行操作地同时追踪覆盖情况。并可以在实时的系统环境下,进行SC、DC 和MC/DC 级别的代码覆盖率测试,帮助测试工程师掌握当前的代码测试覆盖情况,指导测试用例的编写,加速测试进程和产品风险评估过程。
(3) 动态内存分配分析:在 CodeTest 诞生之前,动态地存储器分配情况是难以追踪观测的。CodeTest 的分析能够显示有多少字节的存储器被分配给了程序的哪一个函数。这样就不难发现那些函数占用了较多的存储空间,那些函数没有释放相应的存储空间。测试者甚至还可以观察到存储体分配情况随着程序运行动态的增加和减少,即 CodeTest 可以统计出所有的内存的分配情况。随着程序的运行,CodeTest 能够指出20 多种内存分配的错误。例如:CodeTest 可以捕捉“释放空指针(freeing a null pointer)” 这种常见的程序错误,报告发生错误的函数和代码行,帮助你尽早发现动态内纯泄漏 ,而无需到系统崩溃时。
(4) 执行追踪分析(TRACE):CodeTest 可以按源程序,控制流以及高级模式来追踪嵌入式软件。提供400K 的追踪缓冲空间,最大追踪深度可达150 万条源级程序,其中高级追踪模式显示的是RTOS 的事件和函数的进入退出,给测试者一个程序流程的大框图;控制流追踪增加了可执行函数中每一条分支语 句的显示;源级追踪则又增加了对被执行的全部语句的显示。在以上三种模式下,均会显示详细的内存分配情况,包括在那个代码文件的那一行,那一个函数调用了内存的分配或释放函数,被分配的内存的大小和指针,被释放的内存的指针,出现的内存错误。
我们可以设置软硬件触发器来追踪自己感兴趣的事件,可以显示运行过程中程序运行的实际情况,帮助你查找程序的BUG所在。
3.探头连接
连接方式
--- 标准总线
CPCI PCI PMC VME
---标准连接插座
mictor38 mictor190 双列直插
---飞线
---专用适配器
PPC860 PPC750 PPC603E M68040
封装方式
双列直插
PLCC PGA QFP BGA BGA to PGA QFP to PGAi8c 99
---支持的CPU:
PowerPC,ColdFire,ARM,x86,MIPS,DSP (TI, ADI, Starcore)等。
---支持的OS:
VxWorks,AE,OSE,QNX,pSOS,Chorus,Linux,Lynux,Win CE等。
4.处理 流程
1)先软件预处理,然后CodeTest 插桩,最后编译生成.out 文件和.idb
2)下载到目标板上运行,probe 开始从总线上采集数据
3)CodeTest IDE 得到数据,然后结合.idb 中数据,得到分析结果
5.实现原理
1) 原理:
程序员编写的源代码首先会通过CodeTEST 的编译驱动器调用原编译器对进行预编译,然后CodeTEST 的插桩器(源代码分析程序)对预编译好的源代码进行自动的插桩,即在需要插桩的关键位置写入一条赋值语句(如:amc_ctrt=0x74100009),并把插入的标记送入一个数据 库文件中生成一个符号数据库暂存起来,以备为以后分析时调用。然后,CodeTEST的编译驱动器又会调用原编译器对插桩后的代码进行编译生成可执行目标代码送到目标板上运行。当程序在目标系统运行到插桩点的位置时,目标板的控制总线和地址总线上会出现相应的控制信号和地址信号。当 CodeTEST 的辅助硬件(信号捕获探头)从控制总线和地址总线上监视到符合以上条件的信号时, CodeTEST 会主动地从数据总线上把数据捕获回来送到CodeTEST 的内存中暂存并对这些数据进行预处理 ,然后将预处理后的数据通过局域网送到工作平台上。通过与前面生成的符号数据库中的数据进 行比较,我们就此得知当前程序的运行状态,借此完成对嵌入式软件的性能分析,高级覆盖率分析,内存分析和大容量的代码跟踪。
2) 优点:
CodeTEST 是一个硬件辅助软件的在线测试与分析 工具,它一方面吸取软件打点技术,并对这种技术进行了改善,纯软件测试工具插入的是一个函数,而 CodeTEST 插入的是一条赋值语句, 它在汇编级也是一条语句,所以它执行的时间非常短,同时避免了被其它的中断所中断,它不需要在目标板上存放测试数据,不需要运行额外的预处理任务,所以它对目 标系统的影响非常小(1%-15%)。另一方面,CodeTEST 从纯硬件的测试工具那里吸取了从总线捕获数据 的技术并且对它进行了改善 CodeTEST 不再是采样的方式,它是通过实时监视系统总线,当程序运行到插入的特殊的点的时候才会主动的到数据总线上把数据捕获回来,借此,在同样的处理能力下 ,CodeTEST 可以做到精确的数据观察。