OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7381|回复: 9

关于IAP程序升级的问题 跳转失败

[复制链接]

12

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
917
金钱
917
注册时间
2018-7-18
在线时间
384 小时
发表于 2021-4-9 14:46:04 | 显示全部楼层 |阅读模式
50金钱
所使用的单片机是 STM32F429IGT6
CUBEMX 6.0.1
MDK 5.33.0.0
要升级的程序编译信息:    Program Size: Code=43268 RO-data=1308 RW-data=896 ZI-data=129120  
升级程序的相关设置:


程序目前是通过ST-link下载至FLASH的
但是程序不会运行 DEBUG时 看到进去的 HardFault_Handler

iap部分的跳转程序应该是没有什么问题的 我有另外写了一个简单程序 同样的IAP可以正常跳转 简单程序两个设置跟上图相同;

很疑惑为什么相同的设置  会一个成功 一个不成功,希望大神 解惑!!!




DEBUG的时候发现是在跳转main函数的时候跳转失败的 直接进了HardFault_Handler




正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
917
金钱
917
注册时间
2018-7-18
在线时间
384 小时
 楼主| 发表于 2021-4-9 16:11:11 | 显示全部楼层
我用了此程序之前的版本测试 编译信息:
Program Size: Code=43264 RO-data=1308 RW-data=896 ZI-data=39008  

然后发现这个是可行的  程序能正常跳转

两者之间的大区别在于 此ZI-data=39008  上个ZI-data=129120


然后测试发现 ZI-data > 40K的时候就会出现跳转失败

但是不用IAP跳转的时候 ZI-data=129120  是没有问题的


麻烦知道原因的大神解惑一下!!! 有什么修改的方法

回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2017-7-25
在线时间
4 小时
发表于 2021-4-9 16:54:21 | 显示全部楼层
看看有没有使用标准C函数,选中使用微型库(Use MicroLIB)功能
回复

使用道具 举报

12

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
917
金钱
917
注册时间
2018-7-18
在线时间
384 小时
 楼主| 发表于 2021-4-9 17:02:00 | 显示全部楼层
GhostGuardian 发表于 2021-4-9 16:54
看看有没有使用标准C函数,选中使用微型库(Use MicroLIB)功能

使用了  这个有影响吗?
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2017-7-25
在线时间
4 小时
发表于 2021-4-9 17:07:39 | 显示全部楼层
有影响,不使用MicroLIB,标准C代码库生成的部分代码会与Bootloader的地址会重叠,导致程序运行失败。
回复

使用道具 举报

12

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
917
金钱
917
注册时间
2018-7-18
在线时间
384 小时
 楼主| 发表于 2021-4-9 17:26:17 | 显示全部楼层
GhostGuardian 发表于 2021-4-9 17:07
有影响,不使用MicroLIB,标准C代码库生成的部分代码会与Bootloader的地址会重叠,导致程序运行失败。

谢谢
我的是选中了的   还会有什么其他原因吗
目前我自己最直观的感受是 与ZI-data的大小有关  我把程序的全局变量的数组改小之后是可以运行的  改大之后就不行了
回复

使用道具 举报

12

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
917
金钱
917
注册时间
2018-7-18
在线时间
384 小时
 楼主| 发表于 2021-4-9 17:47:22 | 显示全部楼层
不知道胡乱改了什么  现在是程序能跳转至main函数了   但是在main函数里的初始化外设的时候 忽然就HardFault_Handler了
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2017-7-25
在线时间
4 小时
发表于 2021-4-9 18:09:47 | 显示全部楼层
1。可以看看CubeMx成生的代码有没有指针变量没有对其内存分配。进入HardFault_Handler中断后打开fault report窗口,看看是什么故障,查看《Cortex M4 Generic User Guide》文档的故障描述。
2。查看SP寄存器的确定在进入HardFault_Handler中断前,代码执行到什么位置。然后根据故障描述反推
回复

使用道具 举报

10

主题

51

帖子

0

精华

高级会员

Rank: 4

积分
549
金钱
549
注册时间
2019-7-3
在线时间
338 小时
发表于 2021-7-29 11:24:18 | 显示全部楼层
wwhh 发表于 2021-4-9 17:47
不知道胡乱改了什么  现在是程序能跳转至main函数了   但是在main函数里的初始化外设的时候 忽然就HardFaul ...

请问lz解决这个问题了吗?我遇到一个比较类似的问题,感觉像是栈顶地址分配到0x1000xxxx,跳转到这个地址就不能执行,跳转到0x2000xxxx就可以执行
回复

使用道具 举报

10

主题

51

帖子

0

精华

高级会员

Rank: 4

积分
549
金钱
549
注册时间
2019-7-3
在线时间
338 小时
发表于 2021-7-29 16:33:20 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 09:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表