遇到一个奇怪的事情,在程序的某种特定条件下会触发看门狗复位,更神奇的是,任意的增加几行代码又不不会出现复位!感觉像是哪个地方有溢出。后来直接在会复位的代码上,不删减增加代码,而是只改SysCtrlRegs.WDCR = 0x002D; 改为SysCtrlRegs.WDCR = 0x0068;即把看门狗清除,这样的话就不会出现了!
Seven Han:
您使能了看门狗,在遇到死循环且没有喂狗的情况下,如果看门狗计数器溢出就会产生复位。
遇到一个奇怪的事情,在程序的某种特定条件下会触发看门狗复位,更神奇的是,任意的增加几行代码又不不会出现复位!感觉像是哪个地方有溢出。后来直接在会复位的代码上,不删减增加代码,而是只改SysCtrlRegs.WDCR = 0x002D; 改为SysCtrlRegs.WDCR = 0x0068;即把看门狗清除,这样的话就不会出现了!
jianxing ding:
回复 Seven Han:
谢谢您的回复,但是为什么增加一些代码却不出现呢?可以肯定的是这些代码是不对程序产生实际作用
遇到一个奇怪的事情,在程序的某种特定条件下会触发看门狗复位,更神奇的是,任意的增加几行代码又不不会出现复位!感觉像是哪个地方有溢出。后来直接在会复位的代码上,不删减增加代码,而是只改SysCtrlRegs.WDCR = 0x002D; 改为SysCtrlRegs.WDCR = 0x0068;即把看门狗清除,这样的话就不会出现了!
Seven Han:
回复 jianxing ding:
有没有看下寄存器WDCR的WDFLAG位,看下是什么导致的复位。
遇到一个奇怪的事情,在程序的某种特定条件下会触发看门狗复位,更神奇的是,任意的增加几行代码又不不会出现复位!感觉像是哪个地方有溢出。后来直接在会复位的代码上,不删减增加代码,而是只改SysCtrlRegs.WDCR = 0x002D; 改为SysCtrlRegs.WDCR = 0x0068;即把看门狗清除,这样的话就不会出现了!
jianxing ding:
回复 Seven Han:
寄存器WDCR的WDFLAG位能指示出什么?比如为0代表什么,为1代表什么
遇到一个奇怪的事情,在程序的某种特定条件下会触发看门狗复位,更神奇的是,任意的增加几行代码又不不会出现复位!感觉像是哪个地方有溢出。后来直接在会复位的代码上,不删减增加代码,而是只改SysCtrlRegs.WDCR = 0x002D; 改为SysCtrlRegs.WDCR = 0x0068;即把看门狗清除,这样的话就不会出现了!
Seven Han:
回复 jianxing ding:
http://www.ti.com.cn/cn/lit/ug/sprufb0d/sprufb0d.pdf
0表示的是由XRS或上电复位,1表示看门狗复位。
遇到一个奇怪的事情,在程序的某种特定条件下会触发看门狗复位,更神奇的是,任意的增加几行代码又不不会出现复位!感觉像是哪个地方有溢出。后来直接在会复位的代码上,不删减增加代码,而是只改SysCtrlRegs.WDCR = 0x002D; 改为SysCtrlRegs.WDCR = 0x0068;即把看门狗清除,这样的话就不会出现了!
jianxing ding:
回复 Seven Han:
非常感谢您的回复,我现在可以确定如果不使能看门狗的话,程序会跑死了,但是不会复位,所以从这个情况来看是看门狗复位了。并且中断一直在执行!因为中断有做发PWM波,发现一直在发波,只是主循环死了