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.

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;关闭全局中断,但没有效果

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

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

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

  • 堆栈等设置大小是否合理?
  • 堆栈设置如下:

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

    .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