打印

GD32f130 IAP 跳转过后马上死机

[复制链接]
7685|63
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
做过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问问题最终都是自己解决了

使用特权

评论回复
评论
oyhprince 2024-2-28 15:38 回复TA
是要勾选 Linker --> Use Memory Layout from Target Dialog 吗? iap 升级里,把 keil 勾选此项 生成的 .bin 或者.hex 烧写到 flash里面? 
5
afgnhgrf| | 2017-11-3 10:31 | 只看该作者
IAP还是最好不要用,弄不好就出问题

使用特权

评论回复
6
w995612220| | 2018-1-24 16:53 | 只看该作者
大侠 话说VTOR(0xE000ED08) 设置为 0x00002200 还是设置为0x08002200 呢? 现在也是一开中断,中断向量表就异常了,不懂问题出哪里了. 求赐教

使用特权

评论回复
7
zheng522| | 2018-1-26 10:39 | 只看该作者
这个东西还是不太稳定,最好不要这么干

使用特权

评论回复
8
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、为何单步运行能正常,直接运**死,难道有延时要求吗?个人觉得单步和直接运行就差延时吧?

使用特权

评论回复
9
chuntian2016| | 2018-4-21 18:53 | 只看该作者
这是跑飞了还是?

使用特权

评论回复
10
peace555| | 2018-4-22 13:44 | 只看该作者
程序肯定有问题

使用特权

评论回复
11
poijhgvfcd| | 2018-4-22 14:51 | 只看该作者
估计跳转的位置不对

使用特权

评论回复
12
comeon201208| | 2018-4-25 21:10 | 只看该作者
这估计是硬件引起的

使用特权

评论回复
13
shenmu2012| | 2018-4-25 23:19 | 只看该作者
还是跳转的地址不一致的锅哈

使用特权

评论回复
14
LLZ9974| | 2018-8-22 17:11 | 只看该作者
linguanghua 发表于 2017-11-3 09:56
终于找到原因了。我查看了MAP文件,发现镜像文件的地址不对,真是坑爹。原本以为要修改分散加载文件, ...

兄弟,我也遇到你这种情况了 ,你怎么解决的

使用特权

评论回复
15
LLZ9974| | 2018-8-22 17:20 | 只看该作者
Newman2018 发表于 2018-4-2 10:00
你好,我调试GD32F407 时发现类似问题,我的现象是之前调试通过了,但是我修改代码,(包括删除一些无用 ...

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

使用特权

评论回复
评论
oyhprince 2024-2-28 15:44 回复TA
请问是.map 里 哪一个参数 是 中断向量 
16
oyhprince| | 2024-2-28 11:13 | 只看该作者
afgnhgrf 发表于 2017-11-3 10:31
IAP还是最好不要用,弄不好就出问题

产品要求要在线升级,如果不用iap,那还有什么好的办法升级固件?

使用特权

评论回复
17
oyhprince| | 2024-2-28 15:33 | 只看该作者
我也遇到了这个问题, 用keil 和 Jflasher 还有 GD programmer 下载 到 0x08004000 是可以正常运行的, 但是在程序里 IAP升级,且固件数据是对的,就是不能run。请帮我分析一下,求教了

4000linker.jpg (101.39 KB )

4000linker.jpg

4000启动.jpg (185.28 KB )

4000启动.jpg

使用特权

评论回复
18
烟雨蒙蒙520| | 2024-7-31 23:07 | 只看该作者
你的代码中使用了FLASH_APP1_ADDR,这个地址是你应用程序的实际起始地址吗。

使用特权

评论回复
19
烟雨蒙蒙520| | 2024-7-31 23:08 | 只看该作者
您已经使用 NVIC_VectTableSet() 设置了中断向量表的地址。请确保 NVIC_VECTTAB_FLASH 和地址 0x2800 是正确的。

确认向量表地址:确保 0x2800 是应用程序代码中中断向量表的正确起始地址。如果您使用了其他起始地址,请相应地更新。

使用特权

评论回复
20
classroom| | 2024-8-9 20:07 | 只看该作者
中断向量表未正确更新

使用特权

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

本版积分规则

25

主题

216

帖子

4

粉丝