Emulator与Simulator有个简单的原则差异:emulator(模拟器)主要是指cpu,而simulator(仿真器)则是模拟系统中的硬件行为;而且emulator只能看执行结果,无法进行程序的trace与出错,详细感觉有下面几点:
Emulator:完全模拟cpu的运作方式,根据PC(prigram counter)寄存器的值,从内存中去下一条指令,进行解码并执行。输入程序的格式是编译、连接完毕的二进制代码;如果用在产品开发,工程师可以不用把程序下载到真实机器,只要透过Emulator就可以知道程序执行的结果。因为Emulator和真实机器一样,接受的是程序的二进制文件,所以即使Emulator也是一个windows的程序,工程师依然无法对原始码进行除错。
在嵌入式系统开发上,Emulator对开发的帮助仅仅只限于尚未完成之前,可以先让系统执行看看。如果我们的cpu有现成的emulator,那么用用也无妨;如果必须自行开发,那么就真的大可不实不必!首先,要完整的模拟一颗cpu是一件相当困难事情,恐怕这件事情的复杂度比我们想想的高得多;再来就是emulator对开发的贡献相当有限,等emulator开发测试完毕,硬件板子早就完成了,此时emulator也就失去作用。
Simulator:模拟系统中的硬件行为,例如模拟飞行的PC game就是一种simulator,它只模拟驾驶舱中的操作按钮仪器,并没有迷你这些仪器中的cpu吧。应用在嵌入式系统的开发中,我们所谓的模拟器(simulator)模拟的是实际机器里驱动程序API,这些API必须与其他的陈谷连接成可执行才可以运作。
在嵌入式系统开发的领域中,emulator的应用的确是愈来愈少,一方面也是cpu越来越复杂,要用应用程序模拟cpu执行指令行为确实不容易,另一方面是被模拟cpu和实际cpu执行多多少少会有时间的误差和不相似性
但是有时候我会一般都成为模拟器,实际指的就是simulator,这也仅仅是一个翻译的问题
模拟器的其他功能(logging & profiling)
模拟器除了模拟硬件之外,模拟器基本就是一个可执行程序,是它还可以做一些实际机器做不到的东西,这对开发中除错或同级都有很大的帮助。例如:有些bug很难马上找出除错的程序所在,要trace也不知道从何处trace起,这种情况下show字是很常用的除错方法
所谓的logging就是把执行流程或计算结果先输出到文件中,然后慢慢分析文件中的信息,这样的文件成为log文件,可以让我们追踪程序执行的行为。
所谓的profiling就是在每一个函数的开头或者结尾收集我们想要的信息,然后将其输出;由于信息量通常较大,所以输出到屏幕上并不是很好的办法,做好将其输入到文件中在慢慢分析,这个文件要远远大于log文件的详细度