GD32f130 IAP 跳转过后马上死机

[复制链接]
10146|70
 楼主| linguanghua 发表于 2017-11-2 12:01 | 显示全部楼层 |阅读模式
做过STM32f1,f0系列的iap,没问题。这些要做GD32f130的IAP,flash的擦写没问题,通过工具查看内存flash擦写是正确的。我甚至直接用KEIL直接在对应的地址偏移下载了。但是程序跳转过去后就卡住了。关中断,中断向量偏移都做,

    NVIC_VectTableSet( NVIC_VECTTAB_FLASH ,  0x2800);
    __set_FAULTMASK(0);

还是死机。

这是IAP跳转函数
    if (((*(__IO uint32_t*)FLASH_APP1_ADDR) & 0x2FFE0000 ) == 0x20000000)
    {
        
        JumpAddress = *(__IO uint32_t*) (FLASH_APP1_ADDR + 4);
        Jump_To_Application = (pFunction) JumpAddress;
        __set_FAULTMASK(1);
        MOD_LED_Set(LED_SYS ,LED_ON);
        __set_MSP(*( __IO uint32_t* ) FLASH_APP1_ADDR);                                //        初始化应用程序堆栈指针      
        Jump_To_Application() ;                                                                                //        跳转到应用程序
    }

有没有做过GD32F130IAP成功的大师?谢谢了,搞了一整天。
aozima 发表于 2017-11-2 15:04 | 显示全部楼层
检查APP中是否有把VTOR又给改回去。
 楼主| linguanghua 发表于 2017-11-3 09:18 | 显示全部楼层
VTOR没有改回去,其实即使改了,应该也能跳过去运行一段时间,我的APP一开始就翻转一个LED,但没有执行到那里就死机了。
 楼主| linguanghua 发表于 2017-11-3 09:56 | 显示全部楼层
      终于找到原因了。我查看了MAP文件,发现镜像文件的地址不对,真是坑爹。原本以为要修改分散加载文件,不过发现LINKER选项没有勾选第一个选项,也就是之前的地址修改是无用功,坑啊。
     现在终于OK了。
     发现在21问问题最终都是自己解决了

评论

是要勾选 Linker --> Use Memory Layout from Target Dialog 吗? iap 升级里,把 keil 勾选此项 生成的 .bin 或者.hex 烧写到 flash里面?  发表于 2024-2-28 15:38
afgnhgrf 发表于 2017-11-3 10:31 | 显示全部楼层
IAP还是最好不要用,弄不好就出问题
w995612220 发表于 2018-1-24 16:53 | 显示全部楼层
大侠 话说VTOR(0xE000ED08) 设置为 0x00002200 还是设置为0x08002200 呢? 现在也是一开中断,中断向量表就异常了,不懂问题出哪里了. 求赐教
zheng522 发表于 2018-1-26 10:39 | 显示全部楼层
这个东西还是不太稳定,最好不要这么干
Newman2018 发表于 2018-4-2 10:00 | 显示全部楼层
linguanghua 发表于 2017-11-3 09:56
终于找到原因了。我查看了MAP文件,发现镜像文件的地址不对,真是坑爹。原本以为要修改分散加载文件, ...

你好,我调试GD32F407 时发现类似问题,我的现象是之前调试通过了,但是我修改代码,(包括删除一些无用代码)编译就会出现卡死,个人感觉应该是编译后map问题,但是我发现reset 地址和我IAP跳转地址是一致的,不知道什么原因,还有发现异常的时候,如果采用单步调试,发现卡死在了SystemInit函数,单步运行调试,又不会卡死,等单步运行完SystemInit函数,点击run,程序就可以正常运行了,现象很奇怪,不知道你有遇上过吗? 我发现LINKER第一个选项已勾选,还请你指导下……谢谢!如果把keil工程 flash地址修改为0x8000000 ,去掉NVIC 偏移设置,编译工程程序运行正常。就很纳闷了,1、为何单步运行能正常,直接运**死,难道有延时要求吗?个人觉得单步和直接运行就差延时吧?
chuntian2016 发表于 2018-4-21 18:53 | 显示全部楼层
这是跑飞了还是?
peace555 发表于 2018-4-22 13:44 | 显示全部楼层
程序肯定有问题
poijhgvfcd 发表于 2018-4-22 14:51 | 显示全部楼层
估计跳转的位置不对
comeon201208 发表于 2018-4-25 21:10 | 显示全部楼层
这估计是硬件引起的
shenmu2012 发表于 2018-4-25 23:19 | 显示全部楼层
还是跳转的地址不一致的锅哈
LLZ9974 发表于 2018-8-22 17:11 | 显示全部楼层
linguanghua 发表于 2017-11-3 09:56
终于找到原因了。我查看了MAP文件,发现镜像文件的地址不对,真是坑爹。原本以为要修改分散加载文件, ...

兄弟,我也遇到你这种情况了 ,你怎么解决的
LLZ9974 发表于 2018-8-22 17:20 | 显示全部楼层
Newman2018 发表于 2018-4-2 10:00
你好,我调试GD32F407 时发现类似问题,我的现象是之前调试通过了,但是我修改代码,(包括删除一些无用 ...

我也是这也样  用了IAP    单步调试可以跑过去    但直接运行就出问题了   我打开map文件   发现映射表那些中断有问题    有两个值  一个是从0x0000015C开始,一个是从0x0000015A开始,不知道是不是这里出问题了

评论

请问是.map 里 哪一个参数 是 中断向量  发表于 2024-2-28 15:44
oyhprince 发表于 2024-2-28 11:13 | 显示全部楼层
afgnhgrf 发表于 2017-11-3 10:31
IAP还是最好不要用,弄不好就出问题

产品要求要在线升级,如果不用iap,那还有什么好的办法升级固件?
oyhprince 发表于 2024-2-28 15:33 | 显示全部楼层
我也遇到了这个问题, 用keil 和 Jflasher 还有 GD programmer 下载 到 0x08004000 是可以正常运行的, 但是在程序里 IAP升级,且固件数据是对的,就是不能run。请帮我分析一下,求教了
4000启动.jpg
4000linker.jpg
烟雨蒙蒙520 发表于 2024-7-31 23:07 | 显示全部楼层
你的代码中使用了FLASH_APP1_ADDR,这个地址是你应用程序的实际起始地址吗。
烟雨蒙蒙520 发表于 2024-7-31 23:08 | 显示全部楼层
您已经使用 NVIC_VectTableSet() 设置了中断向量表的地址。请确保 NVIC_VECTTAB_FLASH 和地址 0x2800 是正确的。

确认向量表地址:确保 0x2800 是应用程序代码中中断向量表的正确起始地址。如果您使用了其他起始地址,请相应地更新。
classroom 发表于 2024-8-9 20:07 | 显示全部楼层
中断向量表未正确更新
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

221

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部