This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
目前程序做了一个二次升级的功能,开机时从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;关闭全局中断,但没有效果
还是会出现概率性的复位失败。
另外发现如果出现跳转失败,可以仿真器复位后重新升级,但是再从主程序里复位后又会必然出现跑飞的现象。只有硬件断电重启后才能完全恢复。
哪位大神有相关经验,现在不知道从哪方面找问题,是否有需要注意的地方没考虑到?
堆栈设置如下:
如何排查堆栈分配问题呢?
.stack : > RAMD1 PAGE = 1
.ebss : >> RAMGS0 | RAMGS1 | RAMGS2 | RAMGS8 | RAMGS9 | RAMGS10 PAGE = 1
.esysmem : > RAMGS0 PAGE = 1
.cio : > RAMGS0, PAGE = 1
/* Initalized sections go in Flash */
.econst : >> FLASHI PAGE = 0, ALIGN(2)
.switch : > FLASHF PAGE = 0, ALIGN(4)
.reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */
ramgs5 : > RAMGS5,PAGE = 1
ramgs6 : > RAMGS6,PAGE = 1
ramgs0 : > RAMGS12,PAGE = 1
ramgs1 : > RAMGS13,PAGE = 1
.farbss : > RAMGS7,PAGE = 1
//UartRevData : > RAMGS9 ,PAGE = 1