第12章 · 播客 第5集
嵌入式系统设计 · 调试方法下半场:ICE、BDM/JTAG与模拟器
🎙️ 本集播客:第5集:在线仿真器 ICE 替代的是 CPU 不是 ROM,实时跟踪是它的重要特性;片上调试 ICD 四分类、BDM 的调试模式和执行模式两种运行模式、JTAG 芯片清单;模拟器分指令级和系统调用级,谁更接近真实目标机。三种方法的优缺点横向对比一次到位。 语音由微软 Edge 神经网络语音预生成(女声·晓伊,男声·云希)。点击下方任意对话可直接从该句开始播,当前句朗读时下一句已预先加载,无缝衔接。
明
阿明
接着上集,在线仿真法,ICE 这个名字我听过无数次,它到底仿真的是什么?
雅
小雅
一句话钉死:ICE 是一种用于替代目标机上 CPU 的设备。对目标机来说,在线仿真器就相当于它的 CPU;在线仿真器本身就是一个嵌入式系统,有自己的 CPU、内存和软件。它的 CPU 可以执行目标机的所有指令,但比一般的 CPU 有更多的引脚,能够将内部信号输出到被控制的目标机上;在线仿真器的存储器也被映射到用户的程序空间,因此,即使没有目标机,仅用在线仿真器也可以进行程序的调试。
明
阿明
所以 ICE 换掉的是 CPU,而 ROM 仿真器换掉的是 ROM 芯片,一码归一码。
雅
小雅
对,这两个「替代谁」最爱放在一道题里考。连接方式上,在线仿真器和宿主机一般通过串行口、并行口或以太网相连接;在连接在线仿真器和目标系统时,用在线仿真器的 CPU 引出端口替代目标机的 CPU。调试时,在宿主机运行一个调试器界面程序,该程序根据用户的操作指令控制目标机上的程序运行。
雅
小雅
ICE 的能力:能实时地检查运行程序的处理器的状态,设置硬件断点和进行实时跟踪,所以提供了更强的调试功能;支持多种事件的触发断点,这些事件包括内存读写、I/O 读写及中断等。然后是必考句:在线仿真器的一个重要特性就是实时跟踪——在线仿真器上有大容量的存储器用来保存每个指令周期的信息,这个功能使用户可以知道事件发生的精确时序,特别适于调试实时应用、设备驱动程序和对硬件进行功能测试。但是,在线仿真器的价格一般都比较昂贵。
明
阿明
练习题问 ICE 的重要特性之一,选项里有实时跟踪程序执行过程、无需任何硬件设备、不占用目标机资源、不影响目标系统运行速度,怎么选?
雅
小雅
选实时跟踪程序执行过程。「无需任何硬件设备」错——它自己就是昂贵的硬件设备;「不占用目标机资源」「不影响运行速度」原文都没这么说,倒是它替代 CPU 的做法谈不上不占用资源。做题的窍门:问「重要特性」就找原文里点名的短语,原文只说了实时跟踪这一个。
明
阿明
那片上调试法呢?ICD 这个缩写又是什么?
雅
小雅
片上调试 In Circuit Debugger,ICD,是 CPU 芯片内部的一种用于支持调试的功能模块。按照实现的技术,片上调试可以分为仿调试监控器、后台调试模式 BDM,Background Debugging Mode、连接测试存取组 JTAG,Joint Test Access Group 和片上仿真 OnCE,On Chip Emulation 等几类。
雅
小雅
芯片清单要认脸:仿调试监控器类的 ICD 芯片产品有 Motorola 的 CPU16、CPU32 和 ColdFire 等系列;BDM 类的主要有 Motorola 的 MPC5xx 和 MPC8xx 系列等;OnCE 类的主要有 Motorola 的 DSP 芯片系列;JTAG 类的主要有 PPC6xxx、PPC4xx、ARM7TDMI、ARM9TDMI 及 Intel1960 等。判断题问「ARM7TDMI 支持哪种片上调试技术」,答 JTAG。
明
阿明
BDM 有个两种运行模式的考点,我背了好几遍都会混。
雅
小雅
原文原句:这种 CPU 具有调试模式和执行模式两种不同的运行模式。练习题四个选项:正常模式和单步模式、实时模式和仿真模式、调试模式和执行模式、监控模式和运行模式——答案是第三个,调试模式和执行模式。工作过程也要懂:当满足了特定的触发条件时,CPU 进入调试模式,在调试模式下,CPU 不再从内存中读取指令,而是通过其调试端口读取指令,通过调试端口还可以控制 CPU 进入和退出调试模式;这样宿主机上的调试器就可以通过调试端口直接向目标机发送要执行的指令,使调试器可以读写目标机的内存和寄存器,控制目标程序的运行。
明
阿明
「调试模式下不再从内存读指令,而是通过调试端口读」——这句是理解 BDM 的钥匙。它的优缺点呢?
雅
小雅
优点五条:不占用目标机的通信端口等资源;调试环境和最终的程序运行环境基本一致;无须在目标机上增加任何功能模块即可进行;支持软、硬断点;支持跟踪功能,可以精确计量程序的执行时间,支持时序逻辑分析等功能。缺点三条:实时性不如在线仿真器法强;使用范围受限,如果目标机不支持片上调试功能则该方法不适用;实现技术多样,标准不完全统一,工具软件的开发和使用均不方便。
明
阿明
五种调试方法就剩模拟器了,这个不占硬件吧?
雅
小雅
完全不占。模拟器是运行于宿主机上的一个纯软件工具,通过模拟目标机的指令系统或目标机操作系统的系统调用来达到在宿主机上运行和调试嵌入式应用程序的目的。它适合于调试非实时的应用程序,这类程序一般不与外部设备交互,实时性不强,程序的执行过程是时间封闭的,开发者可以直接在宿主机上验证程序的逻辑正确性。
雅
小雅
两种类型:一类是指令级模拟器,在宿主机模拟目标机的指令系统;另一类是系统调用级模拟器,在宿主机上模拟目标操作系统的系统调用。指令级的相当于宿主机上的一台虚拟目标机,目标机处理器种类可以与宿主机不同,比如宿主机是英特尔的 x86 系列机,虚拟机可以是 ARM、PowerPC、MIPS 等;系统调用级的相当于在宿主机上安装了目标机的操作系统。两句比较结论:指令级模拟器所提供的运行环境与实际目标机更为接近;系统调用级模拟器相当于装了目标机的操作系统。
明
阿明
「哪个更接近实际目标机」——指令级。那模拟器的不足呢?总不能白嫖。
雅
小雅
四条:第一,模拟器环境和实际运行环境差别很大,无法保证在模拟条件下通过的应用程序也能在真实环境中正确运行;第二,模拟器不能模拟所有的外部设备,嵌入式系统通常包含诸多外设,但模拟器只能模拟少数部分;第三,模拟器的实时性差,对于实时类应用程序的调试结果可能不可靠;第四,运行模拟器需要较高的宿主机配置。但原文也给了肯定:在项目开发的早期阶段其价值不可估量,尤其对实时性不强的应用,模拟器调试不需要特殊的硬件资源,是一种非常经济的方法。
明
阿明
我来横向总结:直接测试法看灯最低效;插桩法能断点但占资源不响应外部中断;ROM 仿真器是插桩的补丁;ICE 替 CPU、实时跟踪、就是贵;BDM/JTAG 在芯片内部、有调试和执行两种模式、实时性不如 ICE;模拟器纯软件、省钱、但实时性差。
明
阿明
片上调试的芯片清单里全是 Motorola,这也太整齐了?
雅
小雅
原文就是这么给的:仿调试监控器类是 Motorola 的 CPU16、CPU32 和 ColdFire,BDM 类是 Motorola 的 MPC5xx 和 MPC8xx,OnCE 类是 Motorola 的 DSP 芯片系列;只有 JTAG 类跨了厂商,包括 PPC6xxx、PPC4xx、ARM7TDMI、ARM9TDMI 及 Intel1960。记忆锚点:前三个类型清一色 Motorola,JTAG 才有 ARM 和 Intel 的脸。考法就是「ARM9TDMI 支持的片上调试技术是」,答 JTAG,别答 BDM。
明
阿明
ICD 和 ICE 名字只差一个词,会不会有对比题?
雅
小雅
会有。两个都带 In Circuit:ICE 是 In Circuit Emulator 在线仿真器,替代的是 CPU,是外部硬件设备;ICD 是 In Circuit Debugger 片上调试,是 CPU 芯片内部的功能模块。一个在片外换 CPU,一个在片内做文章,价格上 ICE 昂贵、BDM 类使用较多。问「哪种调试功能模块位于 CPU 芯片内部」,答片上调试。
明
阿明
BDM 的触发条件那句,再帮我捋一遍运行机制。
雅
小雅
三步:第一,满足特定的触发条件时 CPU 进入调试模式;第二,在调试模式下 CPU 不再从内存中读取指令,而是通过其调试端口读取指令,调试端口还能控制 CPU 进入和退出调试模式;第三,宿主机上的调试器通过调试端口直接向目标机发送要执行的指令,从而读写目标机的内存和寄存器、控制目标程序的运行、完成各种复杂的调试功能。芯片外部那些跟调试相关的引脚在调试时被引出,形成一个与外部相连的调试接口——这段机制说明足够应付任何「BDM 如何工作」的简答。
明
阿明
模拟器「时间封闭」这个词挺特别,什么意思?
雅
小雅
原文说模拟器适合调试非实时的应用程序,这类程序一般不与外部设备交互,实时性不强,程序的执行过程是时间封闭的——意思是程序执行不依赖真实世界的时钟和事件,跑多快结果都一样,所以才能在宿主机上验证逻辑正确性,确认无误后将程序写入目标机就可正确运行。反过来说,凡是依赖真实时序的程序,模拟器的调试结果就不可靠,这跟它的第三条缺点实时性差是同一件事的两面。
雅
小雅
再补一个横向对比的考法:五种方法按「占不占目标机资源」排——插桩法占资源;ROM 仿真器不占目标机系统资源和存储空间;ICE 不占(它整个换掉 CPU);BDM 不占通信端口等资源、无须在目标机上增加任何功能模块;模拟器压根不碰目标机。问「哪种调试方法在目标机中要占用一定的系统资源」,答案指向插桩法。
雅
小雅
本集必背第一段:ICE 替代目标机的 CPU,本身就是嵌入式系统,有自己的 CPU、内存和软件,没有目标机也能调试;重要特性是实时跟踪,有保存每个指令周期信息的大容量存储器;支持内存读写、I/O 读写及中断等事件触发断点;缺点是价格昂贵。片上调试 ICD 四类:仿调试监控器、BDM、JTAG、OnCE;BDM 芯片有 Motorola MPC5xx、MPC8xx,JTAG 有 ARM7TDMI、ARM9TDMI、PPC6xxx、PPC4xx、Intel1960。
雅
小雅
第二段:BDM 两种运行模式是调试模式和执行模式,调试模式下通过调试端口读取指令。模拟器分指令级和系统调用级,指令级更接近实际目标机,优点是无需目标机和特殊硬件资源,缺点是环境差别大、外设模拟不全、实时性差、要求宿主机配置高。
明
阿明
开发调试这一大块总算齐了。
雅
小雅
下一集换个领域:嵌入式网络。现场总线为什么被称为工业自动化领域的计算机局域网,FCS 控制系统怎么把控制功能下放到现场,家庭信息网要解决哪两个基本问题,无线数据通信网的短程和接入技术,还有嵌入式 Internet 的两种接入方式和 TCP/IP 协议栈的四条不同。