打印
[STM32F2]

升级跳转的问题

[复制链接]
1273|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ge_yuer|  楼主 | 2015-10-20 11:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我做升级程序,数据写入相应的FLASH区域,跳转应该就是M3的标准跳转,可就是不运行,不知道是不是跳转失败了,相应FLASH区域数据已经读取出来正确的。
沙发
zchong| | 2015-10-20 11:30 | 只看该作者
理解IAP的本质,理解跳转,中断偏移地址,关中断,栈指针这些概念

使用特权

评论回复
板凳
bkn1860| | 2015-10-20 11:31 | 只看该作者
负责跳转到这部分代码要是一个完整的代码,用户代码(跳转后运行)也要是一个完整可以独立运行的完整代码。这个两个单独测试没问题了跳转就不会有问题

使用特权

评论回复
地板
ge_yuer|  楼主 | 2015-10-20 13:27 | 只看该作者
bkn1860 发表于 2015-10-20 11:31
负责跳转到这部分代码要是一个完整的代码,用户代码(跳转后运行)也要是一个完整可以独立运行的完整代码。 ...

这两部分都是好的,分别测试通过,就是用跳转后代码不能正常运行了。

使用特权

评论回复
5
bkn1860| | 2015-10-20 13:43 | 只看该作者
ge_yuer 发表于 2015-10-20 13:27
这两部分都是好的,分别测试通过,就是用跳转后代码不能正常运行了。

确认一下你的跳转入口地址是否正确

使用特权

评论回复
6
ge_yuer|  楼主 | 2015-10-20 16:43 | 只看该作者
bkn1860 发表于 2015-10-20 13:43
确认一下你的跳转入口地址是否正确

地址对的,就是跳转指令那有问题,不知道什么问题,F2的跳转指令和F1的一样吗?有没有跳转那块的程序

使用特权

评论回复
7
bkn1860| | 2015-10-20 16:55 | 只看该作者
ge_yuer 发表于 2015-10-20 16:43
地址对的,就是跳转指令那有问题,不知道什么问题,F2的跳转指令和F1的一样吗?有没有跳转那块的程序 ...

具体指令你在厂家给出的bootloader代码或者IAP代码中找,相同内核的MCU跳转指令是一样的。M3的跳转指令是:
    SCB->VTOR = IAP_START_ADDR;
    JumpBoot(IAP_START_ADDR);

__asm void JumpBoot(uint32_t u32Address)
  {
     LDR SP, [R0]                ;//Load new stack pointer address
     LDR PC, [R0, #4]                ;//Load new program counter address
  }

使用特权

评论回复
8
ge_yuer|  楼主 | 2015-10-21 17:23 | 只看该作者
我的跳转程序:
typedef  void (*pjmpfunc_t)(void);
volatile uint32_t addr = *(volatile uint32_t*)(APP_FLASH_BAZE + 4ul);
    pjmpfunc_t jmpfunc = (pjmpfunc_t)addr;

    __set_MSP(*(volatile uint32_t*)APP_FLASH_BAZE);

    jmpfunc();

请大侠指点。应用程序已经写入FLASH,跳转程序一步步基本也正常,就是跳转不过去,最终仿真停在程序为:
HardFault_Handler\
                PROC
                EXPORT  HardFault_Handler          [WEAK]
                B       .
                ENDP

使用特权

评论回复
9
迪卡| | 2015-10-25 22:32 | 只看该作者
会不会是跳转的入口地址不对呢

使用特权

评论回复
10
309030| | 2015-10-25 22:38 | 只看该作者
楼主解决了吗,怎么搞

使用特权

评论回复
11
ticomi| | 2015-10-26 08:41 | 只看该作者
有没有修改跳转后的中断入口地址?这个很重要!

使用特权

评论回复
12
ge_yuer|  楼主 | 2015-10-26 08:56 | 只看该作者
ticomi 发表于 2015-10-26 08:41
有没有修改跳转后的中断入口地址?这个很重要!

中断入口地址是对的,这个没问题。反复确认过了。

使用特权

评论回复
13
ticomi| | 2015-10-26 10:15 | 只看该作者
ge_yuer 发表于 2015-10-26 08:56
中断入口地址是对的,这个没问题。反复确认过了。

请将中断跳转部分 代码贴出来,我此前也遇到类似问题,折腾很久才解决。还有你是否使用了OS在里面?有没有开启浮点运算单元?这些都有影响!

使用特权

评论回复
14
ge_yuer|  楼主 | 2015-10-28 09:00 | 只看该作者
ticomi 发表于 2015-10-26 10:15
请将中断跳转部分 代码贴出来,我此前也遇到类似问题,折腾很久才解决。还有你是否使用了OS在里面?有没 ...

没用到OS,上面我贴出的就是跳转部分的代码,跳转是用的标准的M3核的跳转。

使用特权

评论回复
15
迪卡| | 2015-10-29 09:58 | 只看该作者
跳转入口地址正确的话,没有理由不行的

使用特权

评论回复
16
ticomi| | 2015-10-29 12:09 | 只看该作者
在__set_MSP(*(volatile uint32_t*)APP_FLASH_BAZE);
语句前增加一句 __set_CONTROL(0);  试试!

使用特权

评论回复
17
huangcunxiake| | 2015-10-29 16:40 | 只看该作者
引导程序跳转到指定的存储位置。

使用特权

评论回复
18
luofeng2g| | 2015-10-29 17:16 | 只看该作者
那你不升级能否直接跳过去? 就是同时把两程序烧进去能否运行?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

40

帖子

0

粉丝