Chinaunix首页 | 论坛 | 博客
  • 博客访问: 799407
  • 博文数量: 124
  • 博客积分: 1927
  • 博客等级: 上尉
  • 技术积分: 932
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-31 14:06
文章分类

全部博文(124)

文章存档

2018年(5)

2017年(2)

2016年(6)

2015年(4)

2014年(24)

2013年(7)

2012年(11)

2011年(13)

2010年(52)

我的朋友

分类: LINUX

2010-09-29 14:45:01

 
 

作为一种解决微处理器因干扰而死机的有效方法,目前看门狗基本上已经成为MCU的必备辅助外围电路。笔者在单片机应用开发中对于看门狗的使用积累了一定的经验,下面以看门狗在MCU系统中的应用为例,与同行们做一下交流。

  看门狗的工作原理

  看门狗是由英文“WATCH DOG”翻译过来的,它的设计使用目的是做微处理器的一个监控者。微处理器在运行中会受到各种各样的干扰,如电源及空间电磁干扰,当它们超过抗干扰极限的时候,就有可能引起微处理器死机。尤其在MCU的应用环境中,更容易受到复杂干扰源的干扰影响。有了看门狗这个监控,就能够在MCU死机后,重新使它复位恢复运行。
  看门狗电路本身是一个带清除端和溢出触发器的定时器,如果不清除它,它就以固定频率发出溢出触发脉冲。实际使用中把这个触发输出引入到MCU的复位端,使用MCU的一个I/O控制它的清除端。看门狗的监控思路是:MCU正常运行时,软件被设计成定时清除看门狗定时器,而一旦MCU死机,这时认为MCU不再发出清除脉冲,看门狗定时器溢出,则自动复位MCU。

  看门狗芯片的选择

  早期的看门狗电路一般都是使用NE555或者CD4060等定时芯片搭建的,直到目前,仍旧有一些书籍和刊物介绍这些电路,实际上它们早已被独立的看门狗芯片取代了。
  提到看门狗,则必须提一下电源监控和上电复位电路。为了使用者的方便,现在的芯片都把上电复位、电源监控及看门狗集成到一起,如IMP813L就是这样一款芯片。还有的芯片更是把EEPROM也集成进去,如X5045芯片。现在的MCU被集成了越来越多的功能,有的集成了看门狗,如PHILIPS的P89C51RX2,有的干脆把电源监控和上电复位及RC时钟也集成了进去,如PHILIPS的P87LPC762。使用者可以根据自己所选择的具体MCU来配置外围看门狗电路及电源监控,除了对功能的选择外,使用看门狗还应该注意它的复位门限电压,一定要确保MCU在看门狗芯片的最小复位门限电压下可以正常工作。附表列出的一些常用的看门狗芯片可以作为设计参考,更多、更详细的看门狗、电源监控及复位类芯片资料可以到www.zlgmcu.com和这两个网站上去查阅。

  看门狗的软件控制方法

  看门狗的使用是需要有合理的控制软件配合的,只有在合理的软件配合下,才能够获得看门狗的预计功能,如果使用不当,可能根本发挥不了它的作用,反而会带来负面效果。
 
1. 几种看门狗软件控制方法的误区及解决方法
  (1) 许多人为了方便,把看门狗的清除控制指令放在系统的定时中断服务程序中,以为这样可以准确清除看门狗。可是设计者应该注意到这样一个问题,就是MCU即使因为PC指针受干扰出错,但是定时器不一定会停下来,定时中断可能根本没有受到影响,看门狗依然被定时清除,它形同虚设。基本的解决方法就是把清除看门狗的脉冲控制指令分散到主程序的各个部分中去,同时仿真保证两脉冲的最小间隔小于看门狗溢出周期。

  (2) 中断程序中隐含的长执行时间,未清除看门狗,导致系统复位。有一些程序在仿真的时候顺利通过了看门狗的测试,但使用中偶尔感觉到系统有复位现象。最可能就是中断超时,比如设计了一个通讯程序,根据对方的要求在一次中断里发送全部数据,一旦没有注意可能的最大数据长度,就会造成看门狗启动,使系统存在隐患。解决它很简单,就是把数据接收和发送中断都修改为每个中断只处理一个字节数据。对于其它中断源也要注意,要尽可能减小中断程序的执行时间,中断程序只留标志和信息,其它工作留给主程序处理。
  (3) 循环程序中隐含超时循环,未能及时清除看门狗,导致系统复位。有些程序中含有延时、循环计算等片段,并且入口循环参数是由它前面的程序运行结果提供的,在某些未预见到的情况就会出现比较大的入口条件,导致看门狗超时。尤其对于一些没有显示的黑匣子设备,根本感觉不到它偶然的复位。解决这个问题的方法就是做一个看门狗清除脉冲子程序,在延时等循环的圈内中加入它,可以保证万无一失。
 
2. 使用其它软件方法配合看门狗
  除了保证对看门狗的合理控制外,还要考虑使用其它软件方法配合看门狗,才能够保证MCU可靠运行。许多书籍在分析MCU失控后的情况时,几乎都假定一般是PC错位,进入未知区域,并不再进入正常程序代码段。但实际并非如此,以下就两种情况做具体分析,并给出解决方法。
  (1)干扰造成PC出错,但出错后进入了正常代码段,并在错误的情况下继续运行,看门狗没有起作用,但系统实际上已经瘫痪。解决这个问题可以使用软件路标法,几乎所有软件的主程序都是在一个大循环里工作,可以在循环中设置一些断点,断点处设置路标,程序运行时随时检查路标,这样就可以判断程序是否有非法进入的可能。具体的路标可以是一个计数器,每个断点加1,在终点清除。因为断点数固定,因此每个断点处路标值固定,只需要检测路标值就可以进行对非法进入的判断。余下的问题就是发现错误后如何处理,正常的处理就是设置死循环,等待看门狗复位。对于PHILIPS的LPC系列MCU也可以置位AUXR1寄存器的SRST位立即进行软件复位。
  (2)干扰导致内部寄存器及RAM出错,但PC未错,因为错误的数据和标志导致程序在错误状态下运行。解决这种问题可以采用RAM校验的方法,具体是在MCU的内部RAM中开辟几个校验区,复位时写入固定代码,如55H或者AAH,并编制校验子程序,运行时随时调用校验,发现错误马上处理,处理方法同(1)。考虑到可靠性,应该多设置几个校验区,但要付出RAM资源代价,应酌情处理。此方法如果与(1)方法同时使用,则会获得更好的效果。

  结束语

  以上对看门狗的芯片选择和软件控制做了一些介绍,笔者通过合理运用,成功地设计出了许多应用系统,这些系统在恶劣的环境下都能够正常工作。但设计看门狗的初衷是防止系统万一死机的弥补措施,设计者本身是希望它永远也不要启动的。因此对于设计MCU系统,不应该过分依靠看门狗,而应该在电源及抗干扰措施上下足功夫,同时合理选择MCU芯片,尽可能选择那些抗干扰能力强,同时低EMI的品种。只有在各个环节都精心设计,才能够保证最终系统的可靠性。
 
 本文来自:  ◆IT在线技术联盟◆()  详细出处参考:
阅读(2471) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~