看门狗问题。

[复制链接]
3113|3
 楼主| yzzly 发表于 2009-7-17 09:15 | 显示全部楼层 |阅读模式
void&nbsp;ClrWdog(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;EALLOW;<br />&nbsp;&nbsp;&nbsp;&nbsp;SysCtrlRegs.WDKEY&nbsp;=&nbsp;0x0055;<br />&nbsp;&nbsp;&nbsp;&nbsp;SysCtrlRegs.WDKEY&nbsp;=&nbsp;0x00AA;<br />&nbsp;&nbsp;&nbsp;&nbsp;EDIS;<br />}<br /><br />void&nbsp;Disable_Wdog(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;EALLOW;<br />&nbsp;&nbsp;&nbsp;&nbsp;SysCtrlRegs.WDCR=0x0068;<br />&nbsp;&nbsp;&nbsp;&nbsp;EDIS;<br />}<br /><br />void&nbsp;Enable_Wdog(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;EALLOW;<br />&nbsp;&nbsp;&nbsp;&nbsp;SysCtrlRegs.WDCR=0x002F;<br />&nbsp;&nbsp;&nbsp;&nbsp;EDIS;<br />}<br />看门狗程序如上,每20毫秒喂一次狗,在RAM运行正常,在FLASH运行(FLASH已经加速)就不断复位!<br />另:书上说读取WDCNTR时返回的是WDCR的值,我读的结果看上去就是WDCNTR的值。晶体30M,设置WDCR=0x2F,读取的值是19或18;设置WDCR=0x2E,读取的值是37或36;设置WDCR=0x2D,读取的值是74或73;设置WDCR=0x2C,读取的只是147或146;设置WDCR=0x2B就不断复位了。
 楼主| yzzly 发表于 2009-7-17 10:56 | 显示全部楼层

看错了,书上说读取WDKEY返回的是WDCR的值.

  
 楼主| yzzly 发表于 2009-7-18 12:08 | 显示全部楼层

是编译的问题。

对于函数<br />void&nbsp;ClrWdog(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;EALLOW;<br />&nbsp;&nbsp;&nbsp;&nbsp;SysCtrlRegs.WDKEY&nbsp;=&nbsp;0x0055;<br />&nbsp;&nbsp;&nbsp;&nbsp;SysCtrlRegs.WDKEY&nbsp;=&nbsp;0x00AA;<br />&nbsp;&nbsp;&nbsp;&nbsp;EDIS;<br />}<br />SysCtrlRegs.WDKEY&nbsp;=&nbsp;0x0055;这一句在编译写入FLASH后,观察FLASH居然找不到对应的0x2825&nbsp;0x0055的代码,只有后一句的0x2825&nbsp;0x00AA的代码,这是为什么??
 楼主| yzzly 发表于 2009-7-18 16:56 | 显示全部楼层

这应该是前句被优化掉了。

在哪设置避免这样的优化呢?虽然在两句之间加入nop或者用变量给寄存器赋值也可以避免,我还是希望哪位能够告诉我是不是编译环境设置的不对以及在哪修改设置。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

428

主题

1192

帖子

3

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