在线仿真器

在线仿真器(英语:In-Circuit Emulator,简称:ICE)是调试嵌入式系统软件的硬件设备。嵌入式系统开发者要面对一般软件开发者所没有的特殊问题,因为嵌入式系统往往不像商业计算机那样具有键盘、显示屏、磁盘机和其他各种有效的用户界面和存储设备。在线仿真器通过处理器的额外辅助功能,使系统在不失去其功能的情况下,提供调试功能。历史上,由于处理器能力有限,这通常意味着将其处理器临时更换成一个硬件仿真器。硬件仿真器是普通处理器的特制版本,内部设有多种额外的调试信号,以便提供处理器内部状态的信息。

而现今,在线仿真器也可以指在处理器上直接进行调试的硬件设备。由于JTAG等新技术的出现,人们可以直接在标准的量产型处理器上直接进行调试,而不需要特制的处理器,从而消除了开发环境与运行环境的区别,也促进了这项技术的低成本化与普及化。在这种情况下,由于实际上并没有任何的“仿真”,“在线仿真器”是个名不副实的误称,有时会造成一些误解。当仿真器被插入到待开发芯片的某个部分的时候,在线仿真也被称作硬件仿真。这样的在线仿真器,可以在系统运行实时数据的情况下,提供相对很好的调试能力。

功能

在线仿真器的基本思想是提供一面通向嵌入式系统内部的窗户。程序员用线上仿真器将程序下载到系统运行后, 可以对程序进行逐步跟踪并察看数据的变化。

之所以被叫做仿真器, 因为它们经常用来模拟嵌入式系统中的中央处理器。通常来说, 它通过一个插头插在一个与 CPU 一样的底座上。由于是模拟主处理器, 仿真器可以在程序员的控制下做任何处理器可以做的操作。

在线仿真器总是将待开发的嵌入式系统连接到一个终端个人电脑。该终端或个人电脑为程序员调试和控制系统提供一个交互式的用户界面

值得注意的是,当程序出现问题,大多数的嵌入式系统会立刻变成毫无用处的废铜烂铁。嵌入式系统总是缺乏监测软件问题的机制,比如内存管理单元读取缓存失败等。如果没有在线仿真器,嵌入式系统开发将变得非常困难,因为根本没有办法知道究竟发生了什么问题。而有了在线仿真器,程序员可以测试每一行源代码,从而找到究竟是哪一段程序出错并纠正错误以解决问题。

在实际应用中,程序员可以通过在线仿真器设置断点、显示和监视内存内容以及控制输入输出。除此之外,程序员还可以通过在线仿真器设置各种条件断点,从而有机会找到很多错误的根源。

最近的一些在线仿真器不再因为仿真而需要一个特殊的目标系统,而是利用由微控制器生产商提供的仿真和调试资源。虽然这样的在线仿真器本身由于只处理微处理上的仿真电路, 而不是真正去模拟微处理器从而成本得到降低, 代价是在微处理器的设计过程中, 需要在保证提供足够仿真机能的基础上控制生产成本。

优势

几乎所有的嵌入式系统都由相互独立但又相互依赖的硬件和软件组成。通过在线仿真器,可以在软件真正将要运行的硬件上运行和调试。同时,通过原码级调试(Source Level Debug, 程序员可以看到运行的源代码)和单步调试(程序员可以一步一步的运行程序寻找错误),程序员可以方便的分离出错误代码。

大多数在线仿真器都由一个位于主机和被调试系统之间的适配器组成。接头和电缆组件将适配器连接到待调试系统上用于安插微处理器的底座。而最近的在线仿真器上, 程序员可以通过 JTAGBDM介面英语Background debug mode interface连接到位于微处理器片上的调试 (On-Chip Debug) 电路进行软件调试。

由于在线仿真器模拟处理器, 所以在待调试系统看来, 就像一个真的处理器;但从程序员角度看来, 待测试系统能够被完全控制, 可以直接下载、调试代码等等。

大多数主机都是普通的与被开发系统无关的商业电脑。例如: 安装Windows系统个人电脑可能被用来开发在 Freescale 的 68HC11 系列微控制器上使用的软件, 而 68HC11 本身并不能运行 Windows 系统。

程序员一般在主机上编写和编译嵌入式系统的代码。所以主机上需要能为特定的嵌入式系统产生代码的编译器,他们被叫做交叉编译器

制造商