1.芯片变量在没有初始化时,变量值为随机值,所以上电第一步初始化变量值,运行下列语句:
.ADJUST_IC SYSCLK=IHRC/4, IHRC= 16MHz, VDD=5V,Init_RAM;// init_ram清零所有变量值。
2.关于查表操作,只要是查表,需要限定查表范围,防止越界,程序跑飞,如果运行过程出现异常死机,而且看门狗无法复位,因为每次跑到每次跑到查表环节就死机,所以先检查变量是否超出查表范围。
eg.有个充电宝项目,用的是PFS123,上电有概率出现死机情况,而且死机的板子只要清空余电,一上电都能复现,不会死机的机子多次上电都正常。
后面找到原因,原来是上电后第一步先打开了定时器中断,后续再初始化变量。
定时器中断里面有查表操作,变量(随机值)还没来得及初始化,就参与了查表操作,导致查表越界,程序跑飞。由于未初始化的变量为随机值,所以出现了概率性问题。
改进建议:上电第一步先Init_RAM和初始化变量值,再打开定时器中断。