嵌入式软件调试世界正在发生变化

描述

 嵌入式系统缩小到我们现在在单个芯片上拥有完整系统的尺寸。您在上一个项目中成功使用的许多调试技术可能无法适应新技术。您不能再依靠可靠的逻辑分析仪或在线仿真器(ICE)来公开您最新设计的所有内部工作原理。高时钟频率,隐藏的探测点和实时软件只是可能破坏您的调试工作并让您挠头的一些问题。但是,您可以调整目标嵌入式系统的设计,以简化调试工作。尽早参与项目并提出可简化调试的硬件或软件结构。您的建议可能会影响内存配置,I/O要求,处理器速度,机械布局,处理器架构和实时规范的设计。您的早期参与将确保您不会遇到笨拙的调试设置或资源太少而无法满足您的日程安排。

  

  例如,应用程序存储的类型会对调试产生深远的影响。如果目标应用程序代码驻留在ROM中,请确保可以替换等效的读/写内存进行调试。否则,您必须为每个程序更新创建ROM版本。此外,除非您的处理器具有片上调试功能,否则不能在基于ROM的代码中引入断点。许多最近的项目选择闪存用于应用程序存储,因为它易于更新以进行调试,并且具有简单且可能远程的现场修订的额外好处。

  更快的处理器,似乎是每个新项目的规范,也创建调试噩梦。当总线速度接近100 MHz时,您将失去仿真器和逻辑分析仪的实时状态显示功能。即使在边缘速度区域,调试连接也可以改变电路阻抗特性,足以引入自己的错误。在选择最新和最好的处理器之前,确保您的项目确实需要额外的速度。

  隐藏的引脚

  即使有合理的时钟频率,目标硬件的物理接口也会令人沮丧调试工作。封装引脚可能会阻止探测,因为它们太精细或者隐藏在芯片下面。大规模ASIC甚至可能无法将所需的总线信号带到外部引脚。这些情况可能会强制您创建与生产单元不匹配的离散组件调试目标。然后,您可以花费数小时追逐甚至可能不会出现在生产硬件中的错误。机械接口问题的另一个解决方案是购买转换器件,将芯片引脚分配转换为与仿真器或逻辑分析器探头兼容的东西。这些易碎的适配器可能会为目标硬件调试预算增加1000美元。

  处理器架构也会影响嵌入式系统调试。例如,完全在片上高速缓存中执行的程序循环不会出现在外部总线引脚上。是的,您可以对处理器进行编程以显示外部总线上的所有活动,但是会丢失缓存性能增强功能。 RISC处理器存在类似的调试问题,包括用于并行指令执行的多个执行单元。如果您的软件设计依赖于这些处理器功能才能正常运行,则无法看到所有处理器活动。

  除硬件外,选择最佳开发和操作系统软件以节省调试时间。您最难忘的调试问题可能包括实时软件问题。异步中断,多处理器或多任务操作系统可以隐藏无法检测的交互错误。寻找可以处理系统面临的实时问题的调试工具和操作软件。

  您最常使用的调试软件工具 - 主机调试器 - 为您提供目标系统代码可见性和执行控制。主机调试器将大部分调试软件集中在通用桌面PC上,并具有到目标的通信通道。您可以在显示寄存器,堆栈内容和CPU状态时启动,停止,单步或断点代码。通过编译器提供的程序信息,您可以访问源代码,变量名称和位置。一个好的调试器应该能够在几个调试环境之间切换,例如目标监视器,ICE,指令模拟器和片上调试。调试器供应商包括Mentor Graphics,Green Hills软件,软件开发系统和Wind River Systems。

  您的编译器也会影响调试效率。如果编译器优化代码,则源文件不一定与目标代码匹配,因为编译器可以重新排列指令或删除不必要的代码。您可以关闭优化以进行调试,但您的系统性能 - 以及可能的可见错误 - 将会发生变化。当然,答案是编写完美优化的代码,以便您不需要编译器的帮助。

  线程挑战调试

  实时操作系统(RTOS)揭示了一个新的调试挑战的世界。您调试共享重入代码的多个程序线程。您必须能够暂停或单步执行一个线程并读取寄存器而不停止其他线程。但要注意,这个专长会导致其他线程的性能受到影响,因为断点会调用处理程序来确定活动线程。异步中断和消息传递也会在实时调试问题列表中排名很高。

  目标硬件和软件并不是影响调试计划和预算的唯一因素。您的调试配置定义了所需的设备,并确定何时可以开始使用。例如,如果您怀疑目标硬件有延迟,则可能需要使用指令集模拟器开始调试。模拟器是大多数工具供应商提供的低成本选项,它们应该与您用于实际硬件调试的调试器一起使用(图1a)。您可以单步执行并跟踪应用程序代码的一部分,以发现许多逻辑和静态错误。大多数嵌入式应用程序都是I/O密集型的,因此您还需要外设模拟器功能。指令集模拟器的主要缺点是其模拟速度低。您可能必须修改代码的程序时间敏感区域以使仿真工作。

  许多低预算的嵌入式项目使用图1b中所示的配置启动调试过程。您可以在台式PC上准备,编译和链接应用程序软件,然后使用目标代码对EPROM或一次性可编程(OTP)设备进行编程并将其插入目标。调试包括观察操作并重复编辑 - 编译 - 更新循环,直到获得所需的性能。您可以通过添加示波器或内置LED可以观察到的仅调试输出指令来获得洞察力。这种调试技术可能适用于简单的软件项目,但它通常演变为更全面的方法之一,如逻辑分析器方法,以找到微妙的软件错误。

  如果您的嵌入式系统硬件可以节省I/O端口和应用程序空间,可以在代码中添加一个简单的目标监视器进行调试(图1c)。您可以读取寄存器,单步执行,并在驻留在读/写内存中的任何应用程序代码中引入断点。虽然基于主机的调试器是可选的,但它的使用将减少所需的目标应用程序空间。目标监视器通过跳转到目标监视器来替换每个断点或单步位置处的指令来执行运行控制。当程序执行到达断点时,监视器将恢复断点指令,显示当前寄存器状态,并等待下一个命令。目标监视器的缺点是您牺牲了系统资源,无法调试基于ROM的代码,并且您没有实时的程序跟踪功能。

  因为大多数嵌入式设计中缺少额外的资源,您可能需要升级到ROM仿真器来调试系统(图1d)。 ROM仿真器用RAM替换目标ROM,并提供到主机调试器的通信路径。此调试设置为您提供与目标监视器相同的功能,而无需在目标中使用不必要的资源。另一个优点是您可以通过通信路径轻松更新代码。您将有一个更短的编辑,重新编译,下载和调试周期。 ROM仿真器适用于大多数基于ROM的设计,即使您选择了不同的处理器,也可以在下一个项目中使用它。 Applied Microsystems的NetROM仿真器支持各种调试器,包括网络连接(图2)。

  在ICE上放置错误

  传统上,ICE是软件调试的首选工具。 ICE的成本可高达25,000美元,但它是最强大,最有效的调试工具之一。您可以获得实时程序跟踪以及所有标准调试器功能。 ICE探针插入目标系统并模拟处理器,ROM和RAM的功能(图1e)。您可以在事件之前和之后指定复杂的触发点并捕获总线数据。由于大多数ICE供应商都包含专有调试器,因此您可能需要学习两个系统才能在调试配置之间切换。在目标硬件可用之前,ICE还可以用作高速模拟器。 Huntsville Microsystems的SPS-1000系列仿真器支持Motorola 5xx/6xx和IBM 4xx PowerPC处理器。

  尽管ICE可能是您发现微妙实时问题的门票,但该技术已经达到极限。提高处理器总线速度现在正在挑战许多仿真器的功能。与任何其他调试工具一样,ICE可以加载高速信号并引入与工具相关的错误。嵌入复杂ASIC的处理器内核的趋势也使得ICE的使用变得不切实际。

  逻辑分析仪,长期以来是硬件工程师的最爱,是其他有效的软件调试工具(图1f)。基本设置是将逻辑分析仪探头连接到目标硬件的各个引脚。然后,定义一个靠近问题区域的触发点,并在触发前的数千个时钟周期内捕获总线和I/O数据。分析跟踪地址和数据应该会导致您遇到软件错误。虽然这种方法听起来很简单,但逻辑分析仪很难设置。较旧的逻辑分析仪要求您输入触发点作为绝对地址,这些分析仪不显示源代码信息。此外,缺少外部信号和隐藏的表面安装引脚可能无法连接到处理器地址和数据总线。与ICE一样,逻辑分析仪也会随着时钟速率的增加而面临带宽限制。尽管存在这些限制并且由于项目预算缩减,但发现自己坐在逻辑分析仪前调试软件并不会感到惊讶。

  即使存在ICE和逻辑分析仪的问题,仪器制造商也没有放弃了。事实上,他们继续推进产品功能。 ICE和逻辑分析仪开始合并。较新的逻辑分析器可以从主机下载源文件或符号表,以启用源代码调试。泰克TLA 720系列逻辑分析仪包括主机调试器,可以对处理器进行运行控制并下载软件更新。

  硅片上调试

  增加缺乏外部探测点和更高的总线速度迫使处理器制造商开发片上调试技术。将少量寄存器和串行端口添加到处理器的芯片中可实现远程执行控制,而无需使用任何目标内存资源或I/O(图1g)。您可以通过串行链路单步执行,设置断点,设置或读取内存和寄存器到外部调试器。由于片上调试芯片通过硬件比较检测地址,因此您可以在基于ROM的代码中插入断点。您可以在没有其他调试技术所需的所有外部连接的情况下查看处理器。片上调试的另一个优点是,很少有目标硬件可以开始调试。如果可以为处理器供电,片上通信链路可能会工作。

  制造商参考通过接口类型进行片上调试。摩托罗拉使用BDM(后台调试模式),而其他处理器厂商称之为JTAG(联合行动测试组)调试。虽然处理器之间的细节不同,但BDM和JTAG接口将调试引脚与通用I/O引脚复用,以最大限度地减少片上调试的影响。 IEEE 1149.1定义了JTAG接口,设计人员将其设想为复杂IC边界扫描测试的访问端口。到目前为止,调试软件供应商已经成功地处理了处理器供应商之间片上调试特性的差异。但是,正在努力使串行接口标准化并指定最低功能。

  嵌入式调试方法包括简单的,有时是免费的模拟器,以及价格超过25,000美元的仿真器/调试器组合。因此,为了最有效地利用您的时间和预算,您应该在项目的早期计划调试。您在设计阶段的输入可以简化调试,甚至无需昂贵的测试设备。此外,您应该注意新的调试方法。处理器供应商不断寻求新的调试技术,这些技术将通过快速时钟速率和深度嵌入式内核证明是有效的(参见附文“下一代调试”)。你可以打赌,调试世界将继续改变。

  下一代调试

  制造商已将片上调试功能集成到当今许多复杂处理器和内核的芯片中。简单的串行接口和远程软件产生令人印象深刻的调试系统。但是,这些串行调试系统缺少连接在线仿真器或逻辑分析仪时的实时跟踪功能。捕获的程序流跟踪是一个很好的工具,用于跟踪错误的实时应用程序中的错误。

  尽管如此,您可能没有多久等待片上调试芯片带来回到那些实时痕迹。最近推出的AMD的ÉlanSC520微控制器包含一个256位缓存,可实时记录程序分支。利用此信息和源代码,主机调试软件可以重建并显示程序跟踪(图A)。可选的并行软件调试接口仅在特殊的绑定部分提供,可在处理器和主机软件之间进行更高速的命令和数据交换。

  泄漏你的胆量

  调试工具需要花费数百美元甚至数千美元,但设计师必须经常用很少的信息做出购买决策。是的,他们有大量的供应商文献,广告和白皮书,但这些信息远非客观。您可以提供帮助。

  您对嵌入式系统调试工具的体验和挫折可能会使其他EDN读者免于无法安排的日程安排和浪费的项目资金。所以,继续让世界知道你的感受。访问EDN针对嵌入式调试工具的新读者评论在线存储库。您的意见可能会让设计师受益,或者只是防止另一个错误。无论哪种方式,EDN读者都会感谢您的意见。

  要输入您的意见,请访问我们的嵌入式系统网页,并点击读者评论链接。只需访问该网站,选择您使用的产品,然后输入您的体验的简短摘要。我们将尝试通过一些简单的规则来保持民事。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分