复位后执行程序起点其实不完全一样,这也是造成你两种复位效果不一样的主要原因
完全的上电复位(启动)会进行一系列标准的初始化操作,很多寄存器值会恢复到最初(比如大多数寄存器值会清零)
而看门狗复位则不一定执行这些初始化,所以如果相关值有变化,看门狗复位后仅仅是程序执行指针复位,但相关值的初始化如果在程序中没有显式进行,则不会变化(相应寄存器值还是复位前的)。
为了消除这样的影响,一个好的方式就是显式初始化所有寄存器。
上电复位程序是把程序指针指到rom程序开始的地址,这个时候ram里面没数据
看门狗复位也是把程序地址指到rom开始的地方,但是ram数据还是死机前的数据
所以你可以在程序里的变量添加一个初期值,这样看门狗复位也不会影响
上电复位是重头开始,所有的都重新初始化,所有RAM寄存器里数据和状态恢复初始值和状态;
看门狗复位,只是PC程序指针清0,RAM寄存器里的数保持之前的值
看门狗复位,没有断电,RAM中的数据还在,上电复位时,RAM中的数据是0
其他的都是一样的了
上电复位是芯片自动的行为,每次上电的时候相关寄存器里面的值都是默认的
看门狗定时器则是要靠看门狗定时器控制器,在CPU上面产生一个中断,这个中断中会自动执行复位