有的处理器除了正常运行外,还能以串行方式运行,所有的取指周期都可呈现于片外总线(相当于禁用缓存与流水线)。这样一来,跟踪容易多了,处理器性能也大大降低了,根本不适用于实时要求严格的系统。
编译器自动在指定的分支及函数出入口插入对特定内存区域的写指令(与gprof等profiling工具采用的手段类似),它们都是不通过缓存而直接向内存写的,这就能反映于芯片外总线从而被外接的逻辑分析仪记录,最终由主机端的调试工具分析并结合符号表重构程序流。这种方法虽被广泛使用,但毕竟是干扰式的(intrusive),对系统性能也有影响。
像上文所述的片上调试那样,也有处理器在片内附加了跟踪电路,收集程序流运行时的"不连贯"(discontinuities)信息(分支和异常处理的跳转目的及源地址等),压缩后送至特定端口,再由逻辑分析仪捕获送至主机端调试工具重构程序流。该方案对系统性能影响最小。
总之,处理器厂家提供集成于片内的调试电路为高档嵌入式系统开发提供各种非干扰式的调试手段早已是大势所趋。为了解决该领域标准化的需要,一些处理器厂家、工具开发公司和仪器制造商于1998年组成了Nexus 5001 Forum,这是一个旨在为嵌入式控制应用产生和定义嵌入式处理器调试接口标准的联合组织,以前的名称是Global Embedded Processor Debug Interface Standard Consortium(全球嵌入式处理器调试接口标准协会)。Nexus现在有24个成员单位,包括创始成员Motorola、Infineon Technologies、日立、ETAS和HP等公司。该组织首先处理的是汽车动力应用所需要的调试,现在已发展成为调试数据通信、无线系统和其他实时嵌入式应用的通用接口。
作者简介
熊竞,任职于中科院计算所嵌入式系统软件组。主要从事开发嵌入式操作系统的仿真器、调试器及集成开发环境。您可以通过电子邮件 jxiong@ict.ac.cn与他联系。
文章来源于领测软件测试网 https://www.ltesting.net/