看门狗复位是否改变内存

[复制链接]
4746|15
 楼主| Batistuta_ 发表于 2008-8-25 17:34 | 显示全部楼层 |阅读模式
AT89C51单片机在现场应用时,偶尔被干扰复位.单片机带看门狗。想问大家:<br /><br />1)干扰导致的复位是不是一定是看门狗复位。<br /><br />2)看门狗复位,内存中的值应该不会改变?<br /><br />3)如果跑飞的程序改变了内存,这种几率有多大?如何提高可靠性呢?
 楼主| Batistuta_ 发表于 2008-8-26 09:28 | 显示全部楼层

这个问题怎么没人注意

  
cnchip 发表于 2008-8-26 10:05 | 显示全部楼层

程序开始时内存清零

事实上Keil自带的汇编启动文件的一个主要工作就是内存清零,会提示你添加,你确定了吗?
 楼主| Batistuta_ 发表于 2008-8-26 10:38 | 显示全部楼层

程序是汇编写的。初始化内存也是自己写的程序。

现场有个别机器偶尔复位,一天有3-4次。复位之后,机器运行状态就会改变。<br /><br />现在想在软件上解决,不知道可行不可行。<br />具体方法:<br />控制板有掉电检测模块,检测到掉电后,触发单片机外部中断,在中断处理程序中写一个字到EEPROM单元,作为掉电标记。<br />单片机初始化程序中先检查EEPROM中是否有掉电标记。若有,表示为上电复位,初始化运行状态参数。若没有,表示为看门狗复位,不初始化运行状态参数。<br />在初始化程序最后,清EEPROM中的标记。<br /><br /><br />不知道这样做是否可靠,请大家指点。<br />
 楼主| Batistuta_ 发表于 2008-8-26 11:57 | 显示全部楼层

吃饭去 。

  
dragon_hn 发表于 2008-8-26 13:17 | 显示全部楼层

先找出复位原因吧!

先找出复位原因吧!
赤铸 发表于 2008-8-26 13:20 | 显示全部楼层

复位本身一般不改变内存内容

除非是强干扰导致的复位,内存也可能同时被干扰改变<br />但复位仍然不是内存改变的原因<br /><br />内存非法修改导致复位,倒很有可能
 楼主| Batistuta_ 发表于 2008-8-26 13:40 | 显示全部楼层

请教;

<br />dragon_hn,不知道怎么找复位原因,一般来说会有哪些情况呢?<br /><br />赤铸,“内存非法修改导致复位&quot;是在什么情况下发生的?<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;干扰引起的复位的过程是不是就是程序跑飞,然后被看门狗复位?<br />
赤铸 发表于 2008-8-26 15:20 | 显示全部楼层

复位主要就是指PC寄存器复位

干扰复位的途径至少有3种:<br />1.&nbsp;电源波动造成复位电路动作<br />2.&nbsp;程序跑飞,看门狗超时复位<br />3.&nbsp;程序跑飞,保护跳转指令复位(程序存储器空白区填满跳转到起点的指令)<br />4.&nbsp;程序跑飞,凑巧跑到起点(理论上是可能的)<br /><br />前两种都属于“正常”复位,会同时进行系统外设、寄存器的复位<br /><br />程序的执行流程是受RAM中的变量控制的,如果关键的变量被非法修改了,当然会死机或复位
liudewei 发表于 2008-8-26 16:44 | 显示全部楼层

建议楼主先关掉或去掉看门狗,看看还有没有自复位现象

如果还有可能是电源的问题。软件出问题导致复位也不排除,看你的处理器是什么类型的。
 楼主| Batistuta_ 发表于 2008-8-26 16:46 | 显示全部楼层

谢谢版主

“<br />干扰复位的途径至少有3种:<br />1.&nbsp;电源波动造成复位电路动作<br />2.&nbsp;程序跑飞,看门狗超时复位<br />3.&nbsp;程序跑飞,保护跳转指令复位(程序存储器空白区填满跳转到起点的指令)<br />4.&nbsp;程序跑飞,凑巧跑到起点(理论上是可能的)<br /><br />前两种都属于“正常”复位,会同时进行系统外设、寄存器的复位<br /><br />程序的执行流程是受RAM中的变量控制的,如果关键的变量被非法修改了,当然会死机或复位<br />”<br />可不可以这样说:<br />情况1,功能寄存器(外设寄存器)和通用寄存器数值不变。<br />情况2,如果看门狗溢出前程序没有执行改变哪些重要参数的内存,那么与情况1相同。<br /><br />但问题是,情况2不改变重要内存的可能性多大?不知道有没有人这么做过。
 楼主| Batistuta_ 发表于 2008-8-26 16:50 | 显示全部楼层

还没有去现场,应该是干扰。

有几台很稳定,另外几台一天复位3-4次。<br /><br />碰到了传说中的干扰,不知道从哪里入手,去了现场应该从哪里排除问题。。。。<br /><br />
liudewei 发表于 2008-8-26 17:31 | 显示全部楼层

有正常的,则基本判定是电源、电磁兼容的问题

  
赤铸 发表于 2008-8-26 19:55 | 显示全部楼层

看门狗复位其实有两条路

改变&nbsp;PC&nbsp;-&gt&nbsp;跑飞&nbsp;-&gt&nbsp;复位<br />改变&nbsp;RAM&nbsp;-&gt&nbsp;死机/跑飞&nbsp;-&gt&nbsp;复位<br /><br />我不知道&nbsp;51&nbsp;的内部物理结构,只能猜测每字节的&nbsp;PC&nbsp;和&nbsp;RAM&nbsp;被干扰的概率差不多(如果用了片外扩展&nbsp;RAM,那&nbsp;RAM&nbsp;被干扰几率就大多了)<br /><br />但&nbsp;PC&nbsp;只有&nbsp;2&nbsp;字节,关键的&nbsp;RAM&nbsp;数量就看具体软件了,也许是&nbsp;0,也许很多,但通常应该不止&nbsp;2&nbsp;字节吧?<br /><br />即使&nbsp;PC&nbsp;被干扰了,也不能排除&nbsp;PC&nbsp;和&nbsp;RAM&nbsp;同时被干扰。<br /><br />----&nbsp;简言之,没有理由说干扰偏偏眷顾&nbsp;PC,所以不要指望干扰复位后&nbsp;RAM&nbsp;还能用<br /><br /><br />
 楼主| Batistuta_ 发表于 2008-8-26 20:26 | 显示全部楼层

哦,看来,还得从源头解决干扰。

<br />怎么查干扰从哪来呢?<br />
dragon_hn 发表于 2008-8-28 03:47 | 显示全部楼层

查源头的方法

1.换个电源.先用示波器测一下电源纹波.如果你的电源是7805等类似芯片提供的话,改由台式稳压电源直接供电,再测试.<br />2.关WATCH&nbsp;DOG,再测试.<br />3.关所有中断,再测试.<br />4.把程序一部分一部分屏蔽,再测试.<br />5.把可以断开的IO口一部分一部分断开,再测试.<br /><br />写程序很多人都会,调试的时候,如何尽快找到故障点才是最重要的.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

777

帖子

0

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