软件调试工具的目的就是尽可能的揭露CPU内部工作情况和软件的执行状态。嵌入式软件开发者用不同的专业化工具来调试固件(具有软件功能的硬件),而用来描述它们的术语却容易引起混淆。下面就是这些工具的概述。
内部电路仿真器(in-circuit emulator, ICE)
ICE是用来仿真CPU核心的设备,它可以在不干扰运算器的正常运行情况下,实时的检测CPU的内部工作情况。像桌面调试软件所提供的:复杂的条件断点、先进的实时跟踪、性能分析和端口分析这些功能,它也都能提供。
ICE一般都有一个比较特殊的CPU,称为外合(bond-out)CPU。这是一种被打开了封装的CPU,并且通过特殊的连接,可以访问到CPU的内部信号,而这些信号,在CPU被封装时,是没法“看到”的。
当和工作站上强大的调试软件联合使用时,ICE就能提供你所能找到的最全面的调试功能。但ICE同样有一些缺点:昂贵;不能全速工作;同样,并不是所有的CPU都可以作为外合CPU的,从另一个角度说,这些外合CPU也不大可能及时的被新出的CPU所更换。
ROM监控器(ROM monitor)
ROM监控器是一小程序,驻留在嵌入系统ROM中,通过串行的或网络的连接和运行在工作站上的调试软件通信。这是一种便宜的方式,当然也是最低端的技术。
它除了要求一个通信端口和少量的内存空间外,不需要其它任何专门的硬件。并提供了如下功能:下载代码、运行控制、断点、单步步进、以及观察、修改寄存器和内存。
因为ROM监控器是操作软件的一部分,只有当你的应用程序运行时,它才会工作。如果你想检查CPU和应用程序的状态,你就必须停下应用程序,再次进入ROM监控器。
在线调试(on-chip debugging, OCD)或在线仿真(on-chip emulator)
特别的硅基材料以及定制和CPU管脚的串行连接,在这种特殊的CPU芯片上使用OCD,才能发挥出OCD的特点。用低端适配器就可以把OCD端口和主工作站以及前端调试软件连接起来。从OCD的基本形式看来,它的特点和单一的ROM监测器是一致的,但是不像后者需要专门的程序以及额外的通信端口。
有两种普遍的OCD接口:
摩托罗拉的背景调试监测(Motorola’s Background Debug Monitor,BDM)
Joint Test Action Group(JTAG):虽然它最初开发出来是为了监测IC和电路连接,但是这种串行接口扩展了用途,包括对调试的支持。
这些接口在底层方面的操作差异较大,但是BDM和JTAG仿真器给终端用户提供同样的便利。
近来,更多的加强型OCD接口提供额外的管脚来收集实时跟踪信息。显而易见,用狭窄的串行接口来捕获快速的实时跟踪信息是比较吃力的。但是,高端调试软件可以让加强型OCD接口模拟ICE的功能,而且,这样做的成本较低。
另有一些高端软件的调试包把通过逻辑分析器收集的实时跟踪信息和标准OCD端口的运行控制特征包含到一起了。