在进行嵌入式系统开发的过程中,经常会用到 ICD和ICE。从字面上讲,ICD的全称为:In Circuit Debugger,ICE为:In Circuit Emulator,中文分别为“在线调试器”和“在线仿真器”。笼统地说,二者都可用于硬件调试和软硬件联调。市面上常见的产品包括ARM公司的Multi-ICE,WindRiver公司的VisionICE和VisionProbe,以及Lauterbach公司的Trace32-ICD和 Trace32-ICE。
那么二者之间究竟有什么区别和联系呢?回答这个问题这要从嵌入式系统调试手段的演化说起。
在早期的嵌入式开发中,尤其是8位机和16位机占主流的时代,ICE是最为常用的调试设备,它的核心思想是完全模拟CPU工作,通过外围电路捕获CPU的各种状态信息,输送到PC端,也就是说它相当于CPU+调试电路,可以从物理上完全替代CPU。所以最早的ICE在使用时需要将CPU从插口上拔下来,再将ICE的电缆插进去。
ICE的出现,给嵌入式开发人员带来了极大的便捷。但随着芯片制造技术的飞速发展,ICE也逐渐显露出一些无法回避的缺陷
1、ICE必须比被调试 CPU运转更快,这样才能在模拟CPU的同时向外输送调试信息,而CPU主频的不断提高使得实现这一点越来越难;
2、日渐复杂的封装技术导致ICE替换CPU的难度不断增大;
3、ICE的先天特性决定它总是落后于CPU发布;
4、ICE的价格通常非常昂贵。
这些缺陷给ICE的发展带来了一定的阻碍,在这种情况下,EmbeddedICE应运而生。