目前程序做了一个二次升级的功能,开机时从loader检测标记,并选择是否跳转至主程序;升级时从主程序跳转回loader。
但是从主程序调转回loader时用__asm(" LB 0x00080000");命令发现跳转后功能不正常,后选择使用看门狗复位的方式实现软件复位
EALLOW;
// Enable the watchdog
HWREG(&(WdRegs.WDCR.all)) = 0x0028;
// Write a bad check value
HWREG(&(WdRegs.WDCR.all)) = 0xFFFF;
EDIS;
功能实现基本正常,但是发现偶尔会出现看门狗复位后,并没有跳转回loader,而是跑飞了。尝试过在跳转之前加上DINT;关闭全局中断,但没有效果
还是会出现概率性的复位失败。
另外发现如果出现跳转失败,可以仿真器复位后重新升级,但是再从主程序里复位后又会必然出现跑飞的现象。只有硬件断电重启后才能完全恢复。
哪位大神有相关经验,现在不知道从哪方面找问题,是否有需要注意的地方没考虑到?