此内容由EEWORLD论坛网友tiankai001原创,如需转载或用于商业用途需征得作者同意并注明出处
msp430单片机开发实录(2)
现象:
项目有改动,需要添加一个功能,而这个功能不涉及到硬件电路,所以就偷懒不想用硬件仿真。直接在IAR中选择软件仿真。把添加的功能函数放在程序开头,这样就可以用软件仿真,不用再连接仿真器和电路板了。但是仿真过程中发现这个函数没执行过就总是出现复位的现象。
试验:
开始认为是添加的这个函数有问题才会导致程序复位,于是添加了一个之前调试通过的函数(不涉及硬件操作,如果涉及硬件操作,就不能用软件仿真了)。结果不会出现程序复位的现象。于是更加确认是添加的这个函数有问题。仔细检查该函数,反复确认好几遍,没有发现有任何问题。一时间这个问题陷入僵局。
无奈之下,对比之前调试好的项目,忽然发现了问题所在:一般430单片机上电后程序最先要写上的两句话是:
- _DINT(); //关中断
- WDTCTL = WDTPW + WDTHOLD;//关看门狗
而我这次因为偷懒,把添加的函数放在“关闭看门狗”语句之前了,所以可以初步确认是看门的狗的问题,于是查阅数据手册里关于看门狗的描述:看门狗在上电后自动默认打开,复位时间是32ms。真相大白!
而早前添加的调试通过的函数之所以没有出现复位,是因为那个函数的执行时间短,小于看门狗复位时间,所以不会复位,而新加的这个函数执行时间长,大于32ms,所以会出现复位。
验证:
把添加的函数放在关闭看门狗语句的后面,程序就不会再出现复位想象了!反复测试多次,确认问题得到解决!