stm8升级完跳转不成功!!!

2019-07-19 20:18发布

STM8芯片。实现在线升级功能,写了BOOT和APP两套程序。
正常上电时,boot可以正常跳转到APP;
APP里需要升级时,也可以正常跳转到boot;
但是在boot里升级完程序后,执行重启函数:
       asm("LDW X,  SP ");
        asm("LD  A,  $FF");
        asm("LD  XL, A  ");
        asm("LDW SP, X  ");
        asm("JPF $E000");

仿真时也看到程序从boot跳转到APP了,但是APP此时却死掉了(表象是没有跑起来);
非要等到手动上电复位后,APP才能正常运行。

APP既然能正常运行,说明flash擦写应该没有问题,但不明白怎么在不断电的情况下APP咋就跑不起来呢??

而且这种情况通常出现在用小程序去更新原来的大程序的时候,要是两个程序量差不多,反而可以正常跳转。
小程序和大程序的区别是,大程序功能比较多,有硬件各种引脚的配置及操作,小程序只开了串口功能和flash处理功能。

现象太诡异了!请大神指导一下问题究竟出在哪里。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
ssssssssssss
1楼-- · 2019-07-20 01:00
贴重要部分代码看看
嘴角的上弦月
2楼-- · 2019-07-20 02:28
 精彩回答 2  元偷偷看……
嘴角的上弦月
3楼-- · 2019-07-20 04:01
ssssssssssss 发表于 2018-9-19 13:38
贴重要部分代码看看

APP中的跳转代码:

            case 0x1D:
                usetFlag = 0xAA;
               
                asm("LDW X,  SP ");
                asm("LD  A,  $FF");
                asm("LD  XL, A  ");
                asm("LDW SP, X  ");
                asm("JPF $8000");
               
                break;

主要是有些程序可以正确执行所有操作,有些程序下载完APP就挂掉了,这点不明白到底是哪个地方没有考虑到。
嘴角的上弦月
4楼-- · 2019-07-20 04:47
本帖最后由 嘴角的上弦月 于 2018-9-19 16:05 编辑
嘴角的上弦月 发表于 2018-9-19 15:22
boot初始化代码:
    disableInterrupts();//关总中断
        

上面的两个跳转地址写反了,往上面贴的时候贴错了。。笔误。。。已经修改过了
ssssssssssss
5楼-- · 2019-07-20 07:57
 精彩回答 2  元偷偷看……
嘴角的上弦月
6楼-- · 2019-07-20 11:33
ssssssssssss 发表于 2018-9-19 16:44
丝毫没看到中断向量表配置的内容

boot中没有用中断,有中断映射,是在网上找的代码:
__root const long reintvec[]@".intvec"=
{
  0x82008080,0x8200E004,0x8200E008,0x8200E00c, //除第一个0x82008080以外,其它数值要根据应用程序地址更改
  0x8200E010,0x8200E014,0x8200E018,0x8200E01c,
  0x8200E020,0x8200E024,0x8200E028,0x8200E02c,
  0x8200E030,0x8200E034,0x8200E038,0x8200E03c,
  0x8200E040,0x8200E044,0x8200E048,0x8200E04c,
  0x8200E050,0x8200E054,0x8200E058,0x8200E05c,
  0x8200E060,0x8200E064,0x8200E068,0x8200E06c,
  0x8200E070,0x8200E074,0x8200E078,0x8200E07c,
};

一周热门 更多>