TI中文支持网
TI专业的中文技术问题搜集分享网站

dsp28379s 软件复位跑飞

目前程序做了一个二次升级的功能,开机时从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;关闭全局中断,但没有效果

还是会出现概率性的复位失败。

另外发现如果出现跳转失败,可以仿真器复位后重新升级,但是再从主程序里复位后又会必然出现跑飞的现象。只有硬件断电重启后才能完全恢复。

哪位大神有相关经验,现在不知道从哪方面找问题,是否有需要注意的地方没考虑到?

mangui zhang:堆栈等设置大小是否合理?

目前程序做了一个二次升级的功能,开机时从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;关闭全局中断,但没有效果

还是会出现概率性的复位失败。

另外发现如果出现跳转失败,可以仿真器复位后重新升级,但是再从主程序里复位后又会必然出现跑飞的现象。只有硬件断电重启后才能完全恢复。

哪位大神有相关经验,现在不知道从哪方面找问题,是否有需要注意的地方没考虑到?

user4586506:

回复 mangui zhang:

堆栈设置如下:

如何排查堆栈分配问题呢?

.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

赞(0)
未经允许不得转载:TI中文支持网 » dsp28379s 软件复位跑飞
分享到: 更多 (0)