打印

仿真器的使用与产品质量的关系问题

[复制链接]
3653|36
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
平常人|  楼主 | 2007-3-16 22:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看到另一个帖子里讨论该不该用仿真器的问题,觉得有必要说几句,因为我是从一个完全不同的角度看待这个问题,所以开一个新的主题展开讨论,本人学识浅薄,还请高人评判。原帖的链接如下:换了个公司 发现问题多多?用仿真器要挨骂

在那个帖子里有两派观点:
不用仿真器是:1)为了炫耀 2)因为自信 3)为了培养新人 4)因为程序简单
用仿真器是:1)为了迅速定位故障 2)为了加快开发进度 3)为了调试中断的时候方便

我的观点是,首先不管什么原因,有条件要用仿真器,没有条件创造条件也要用仿真器;第二也是更加重要的理由是“使用仿真器是保障产品质量的重要手段之一”。

这里有一个重要的概念,产品的质量是做出来的不是测出来的,“产品的质量是做出来的”的意思是说,在产品设计和开发的各个阶段及各个环节的每个细节都与最终产品的质量紧密相关,使用仿真器的目的就是在开发的过程中,随时保证设计中要求的每个环节都是正确无误地被实现了,实现中的每一个分支、每一个程序段都是按照设计与想象相符。当你能够保证每个环节都是正确的时候,最后做出的产品自然就会有好的质量。

使用仿真器,你可以随时观察和监视内存中各种变量、堆栈的变化与状态,随时观察和监视各种寄存器的变化与状态,随时观察和监视各种外设的变化与状态,随时保证你的算法始终按照你的设想执行。使用仿真器的另一个更主要的好处是,你可以对程序中的某一个段落进行跟踪测试,很多程序内部的段落在产品阶段的测试是很难测到的,如异常处理部分就有可能无法模拟要处理的异常,而无法在产品阶段的测试中检测。

通常,测试的方案和流程总是有缺陷的,现实中没有一个测试方案或流程可以覆盖程序设计中的每一个分支,开发过程中仿真器的使用刚好帮助你弥补这个不足。熟练地使用仿真器后,你会发现自己对通过测试的自信心将大大地加强。

所以,强烈呼吁各位尽可能使用仿真器,不管是大程序还是小程序,这是一个习惯的问题,不是个人信心的问题,更不是炫耀的问题,产品的质量不能当儿戏!

相关帖子

沙发
AA_55| | 2007-3-16 23:09 | 只看该作者

先支持一下楼主

明天再写详细的贴子:D

使用特权

评论回复
板凳
平常人|  楼主 | 2007-3-16 23:35 | 只看该作者

谢谢NE5532的2个例子

加断点当然要考虑硬件的情况,不能想在哪里加就在哪里加;2楼的例子很好,恰好可以说明这个问题。

我再举一个例子,在USB的枚举过程中,每个步骤之间是不能有较大时间间隔的,否则PC端将按超时处理,你可以在每个步骤结束后停下了察看执行的情况,当这个步骤无误后清除这个断点,设置下一个监测点,再从头运行程序,不能从断点处继续,因为这时PC端已超时退出枚举过程;这样一步一步保证每步的正确性,最后连续运行自然得到正确的结果。这就叫一步一个脚印。

使用特权

评论回复
地板
computer00| | 2007-3-17 01:03 | 只看该作者

我觉得仿真器速度太慢了,用起来不爽.

不如软件仿真算法,然后直接上硬件测试. 需要查看问题的地方可以通过串口等方式反馈回来。

使用特权

评论回复
5
NE5532| | 2007-3-17 08:42 | 只看该作者

一步一个脚印是正确的。

那如果遇到的问题是:EPSON M-U110II 打印机在匀速打印区内打印的文字出现变形,楼主怎么调试呢?

打断点吧,打印机一停下来就没有调试意义了,全速运行吧,变形的还是变形。

使用特权

评论回复
6
平常人|  楼主 | 2007-3-17 09:05 | 只看该作者

6楼的问题当然是分别在打印出现变形的之前、之中和之后停

停下来时检查软件、硬件、机械等各部分哪里出现异常,根据各种故障假设,改变一些硬软件或机械参数,再在仿真环境下复位、运行、断停,察看各部分的变化,如此反复直到满意。

当然,仿真器只是辅助手段,像6楼这种复杂系统也需要配合5楼所说的串口反馈等手段,一台示波器往往也是必需的。

不要把仿真器想成是万能的,它只是一个工具,一个可以提高工作效率的工具;作为工具,有些场合适合,有些场合不一定适合。

我的观点是:仿真器的使用在保证产品质量方面扮演极其重要的角色。

使用特权

评论回复
7
dengm| | 2007-3-17 09:34 | 只看该作者

完全同意 平常人 的观点

使用特权

评论回复
8
NE5532| | 2007-3-17 09:39 | 只看该作者

那么仿真器的功能也就是察看内存数据咯

用串口察看为何不可?

使用特权

评论回复
9
NE5532| | 2007-3-17 09:41 | 只看该作者

当然补充一下,用不用仿真器和是不是高手之间没有必然联

这就像讨论该用Linux还是用Windows写C语言一样无聊。

使用特权

评论回复
10
forthlab| | 2007-3-17 09:50 | 只看该作者

我觉得还是要了解一下,国外的单片机开发情况

可以有借鉴。

使用特权

评论回复
11
平常人|  楼主 | 2007-3-17 09:57 | 只看该作者

回复9楼的问题:少量的数据可以用串口察看,有时可能更好

但数据量大时(上百、上千字节的数据)就不大适合用串口了。

串口一次输出较少数据,若不能一次准确定位,可能需要从新编译输出另一组数据,而用仿真器一次可以查看多组数据,达到较高的调试效率。

10楼的观点非常好,用不用仿真器和是不是高手之间没有必然联系,高手往往更需要有效顺手的工具发挥自己的水平,高手是干大事的,不应因为没有顺手的工具而限制自己的发挥。


至于国外的情况,不敢妄加评论,仅举一例,本人用过的第一台,也可能是中国第一台仿真器是Intel生产的8080仿真器,体积大约是80公分宽、60公分深、50公分高,后来Motorola单片机的仿真器体积迅速地缩小到两本大字典的尺寸;现在说起8080很多人都没听说过,但那时Intel就开始生产仿真器了,可见仿真器在国外开发领域的地位了。

使用特权

评论回复
12
computer00| | 2007-3-17 10:15 | 只看该作者

是的,有时候是实在没办法了,才用到硬件仿真器

象现在的芯片,ISP功能和JTAG功能已经很强大了,基本上只凭这两个东西就差不多可以解决绝大部分问题.

只有一些极少数比较特殊的场合,实在需要硬件仿真器了,才用硬件仿真器上去试试.

我觉得用仿真器去代替实际的芯片,反而增加了系统的复杂度. 由于仿真器的介入,不管从物理连接,
还是在软件控制上,都增加了复杂度,并且还有可能出现仿真器跟实际硬件不一样的结果,毕竟仿真器
也是个别人开发出来的产品,可能本身就存在bug. 而也有可能是仿真器是对的,而芯片存在bug.
当然了,遇到这样的情况时,可以通过其它手段来解决的,但是从这一点上来看,仿真器并不是
太可靠的,只是在某些特殊的情况下,让你能够更快的调试. 例如模拟一个时序,你可以用仿真器
单步运行,然后慢慢来观察IO口的电平,这个用普通万用表或者LED都可以看清变化状态了。但是,
如果你有一台数字示波器的话,就不必这么罗嗦了,可以直接捕捉波形. 有时由于时序太快的
而导致器件无法识别,这种情况往往是单步运行可以,而全速就不行,这时就需要靠一点经验了,
在某些估计会出错的地方加上延迟.


至于一步一个脚印,我觉得用串口反馈就完全可以做到了。你可以开始只写一个个的模块,
然后分别测试,每个都测试通过之后,才放到一起,联合工作. 而需要设置断点的地方,你可以用一个
等待串口命令的语句,而需要返回某个变量或者内存的值,你可以通过串口来返回,当然也可以通过串
口来设置,只不过需要自己多写一小段程序而已,但这些东西一旦做好之后,以后也可以使用的。

使用仿真器比较方便的一个地方就是程序跑飞(例如指针越界,堆栈溢出等),这时你无法准确的知道
程序是在哪飞掉的,如果你有仿真器,就容易一些,估计还没飞之前,设置一个断点,然后再单步,看
它到底是在哪飞的,怎么飞的等等。然而,如果你的芯片具有JTAG,那么就可以通过JTAG实现这个功能,
而不用硬件仿真器。上次我在弄ARM_00_OS时,就是通过JTAG来解决问题的。软件仿真完全没问题,但是
上到硬件上全速就不行了,然而通过JTAG单步却没问题。这就有点郁闷了。后来想到是因为在特权模式下
访问用户寄存器的指令,后面不能紧跟访问备份寄存器。我在这些地方插入一个NOP之后,就解决掉问题了。


https://bbs.21ic.com/club/bbs/list.asp?boardid=35&t=2076437&tp=%u771F%u662F%u6655%u83DC


所以我的观点是,平时尽量不要用硬件仿真器,实在没办法时,才动用仿真器。

使用特权

评论回复
13
maychang| | 2007-3-17 11:14 | 只看该作者

想问问楼主

你用的那台Intel生产的8080仿真器,在设计时用什么东西调试?显然不可能用仿真器,还没有做出来呢!
再往前说,8008乃至4004用什么仿真?
第一台电子计算机“埃尼阿克”用什么仿真?

使用特权

评论回复
14
无格| | 2007-3-17 11:21 | 只看该作者

呵呵,来一场关公战秦琼如何?

使用特权

评论回复
15
NE5532| | 2007-3-17 11:29 | 只看该作者

好热闹啊,看来又爆出一个热点话题

历史热点问题回顾:

[A]女生是否适合搞电子
[B]51和AVR谁好
[C]汇编和C语言谁好
......

使用特权

评论回复
16
NE5532| | 2007-3-17 11:40 | 只看该作者

投票看下结果吧

https://bbs.21ic.com/club/bbs/bbsView.asp

不过没弄好,只能投前两个选项

使用特权

评论回复
17
maychang| | 2007-3-17 11:54 | 只看该作者

这不是“关公战秦琼”

第一台仿真器显然不可能用仿真器进行仿真,就和第一台5米立式车床不可能用车床加工一样。
所以,设计第一台仿真器的工程师绝对是头等高手,他的工作是“无中生有”,完全靠脑子想象仿真器的全部工作。但第一台生产出来之后就不一定了,用与不用仿真器,很可能是个人习惯,与是否高手没有绝对的关系。有的人用仿真器觉得方便,可以加快设计速度,有的人觉得不方便,还没有用串口或JATG甚至在多余的口线上加一两个LED调试来得快。
仿真器用好还是不用好,就像香蕉和桔子哪个好吃一样,是没有答案的问题。

使用特权

评论回复
18
AA_55| | 2007-3-17 12:37 | 只看该作者

楼上的说法反过来正说明仿真器存在的合理性

虽然最早的仿真器不是用仿真器做出来的,但是却有人专门做仿真器了。为什么会从没有仿真器到有人做出仿真器?因为有实际需要。如果真的靠头脑里面仿真就能达到目的,那仿真器就没有必要开发出来了。

真正的仿真器对实际物理运行的干扰和影响是很小的。很多人认为仿真器不可靠,是因为国内仿制的仿真器水平不够,或者受成本等条件限制,不能生产出更好地仿真器。原装的仿真器价格昂贵,但是的确好用。第三方仿真器是在性能和价格方面折衷开发出来的,所以不是很好,例如某些国产51仿真器,在仿真时候要占用51芯片上的一些字节,有的还要占据一些管脚,这样的仿真器在仿真时候,肯定与真实运行环境是不同的,造成仿真与实际运行有出入,不过看在价格上,用户也就忍了。但是,不能因为这些简易仿真器的存在,就认为所有仿真器都是不好用的。

使用特权

评论回复
19
无格| | 2007-3-17 13:15 | 只看该作者

撇开自身所处的开发条件单独来讲用不用仿真器

俺觉得毫无疑义.十八般兵器只要使的称手就好.

使用特权

评论回复
20
maychang| | 2007-3-17 13:21 | 只看该作者

回 AA_55

我并不认为我的帖说明仿真器存在的合理性。
我是从来不用仿真器的,一次也没有用过。
当初我自己做过一个51仿真器,连电路板都没有(没钱,舍不得做电路板),所有联线都是用导线直接联,但做好之后仅用来烧EPROM,从未用来仿真。
早期,我的习惯是用EEPROM代替EPROM(省了紫外擦除的麻烦),调试完后再烧EPROM。后来有了片内带FLASH的单片机,就改成直接烧入了。
犬子在我的影响下,现在同样是放着仿真器也不用,他也认为不用仿真器调试速度倒快些。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

2655

帖子

1

粉丝