呵呵,可能是个定时炸*

[复制链接]
8247|34
 楼主| bg6nw 发表于 2008-12-25 22:09 | 显示全部楼层 |阅读模式
困扰了一年的EEPROM开机或关机改写的问题,无意中解决了。
一款产品,时而有24C04在开机瞬间被改写的BUG,不是太普遍,但很让人头痛,用加大上电复位电容延长复位时间的法子没有一丝改善。
有一个规律就是用KOREA的MCU没有出现过这样的毛病,只要插上CHINA的MCU,来几个迅速开关机,数据就被改写了。
前天猛然想到以前看到过程序匠人的一篇**,说到程序强壮性的问题,好像是语句冗余的方法。当即打开汇编工具,在关键跳转前面加了两个NOP,所有LCALL前面也加了两个NOP,烧个CHINA制造的片子一试,OK了。
E007 发表于 2008-12-25 22:12 | 显示全部楼层

MADE IN CHINA ~

    痛~
新闻局 发表于 2008-12-25 22:12 | 显示全部楼层

未必是你说的原因...

linqing171 发表于 2008-12-25 22:15 | 显示全部楼层

这个够强

什么时候匠人在出来解释一下,似乎没有听说过加两个nop有什么用。
PowerAnts 发表于 2008-12-25 22:21 | 显示全部楼层
谈的元 发表于 2008-12-25 22:24 | 显示全部楼层

cccccccccccccc

sz_kd 发表于 2008-12-25 22:46 | 显示全部楼层

呵呵,可能是个定时炸*

winloop 发表于 2008-12-26 13:40 | 显示全部楼层

还是没找到真正的原因

dcp 发表于 2008-12-26 14:06 | 显示全部楼层

你再试试慢上电

icecut 发表于 2008-12-26 15:28 | 显示全部楼层

感觉不太像啊

开关机几次,扑捉几个波形看看....

mips曾经要求跳转后要加nop
yewuyi 发表于 2008-12-26 16:20 | 显示全部楼层

匠人JJ简直是害人啊。。。

LZ是有中国特色的工程师。。。
hab2000 发表于 2008-12-26 16:28 | 显示全部楼层

没办法了,只好加NOP

有时候逼急了,所谓有病乱投医,试好了为原则,具体病因可能时间长了也就忘记还有这么回事。普遍工程师的态度。
奇门遁甲 发表于 2008-12-26 16:32 | 显示全部楼层

re

不信。
awey 发表于 2008-12-26 17:20 | 显示全部楼层

51的指令结构带来的毛病

程序跑飞,将数据当成是指令执行的结果。加两个nop可以纠正这种错误。

用单字的指令结构的单片机(比如PIC),可以避免。
耕在此行 发表于 2008-12-26 18:17 | 显示全部楼层

加两个NOP是有道理的

不过一般是加在跳转或调用之后。
加之前也有道理。
ljm810010 发表于 2008-12-26 18:24 | 显示全部楼层

从不相信加NOP这回事

跑飞了也就飞了,再跑回来也不会是什么好事,即使跑回了,还是会再被干扰。做好硬件抗干扰才是正道。
awey 发表于 2008-12-26 18:41 | 显示全部楼层

当然,能硬件解决更好

楼主这种情况大多发生在关机或受到干扰时,正常开机有复位电路,程序跑飞的可能性不大。
在适当的地方加两个NOP,能将跑飞的程序引到设计者可预知的程序跑道,不至于做出无法预料的事情。

51指令大多是多字节指令,由指令码和数据组成,当PC跑飞时,如果PC指向一条多字节指令的数据地址上,就会将数据当成是指令来译码,产生无法预料的结果。
ayb_ice 发表于 2008-12-26 19:39 | 显示全部楼层

加两个NOP可以挽救程序跑飞

除非你的程序跑飞,不过我认为你没有找到真正原因
wacke 发表于 2008-12-26 19:46 | 显示全部楼层

觉得不是真正的原因,多考虑考虑单片机上电的管脚状态。

对关键管脚用电阻上拉或下拉来保证上电过程电平正常。
mrainborn 发表于 2008-12-26 19:54 | 显示全部楼层

我们的机器有过这样的问题,是这样解决的

因为机器在出厂前对2402写好后,用户那里不再对2402进行写,就改成这样了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

511

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部