OpenEdv-开源电子网

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

请问falsh起始地址IAP跳转问题

[复制链接]

24

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2013-8-15
在线时间
6 小时
发表于 2021-2-15 09:50:25 | 显示全部楼层 |阅读模式
10金钱
内部有2个APP。通过IAP跳转

想法是:做固件升级,内部放2个APP,一个是当前版本,一个是上一个版本。 2个APP互相轮询的烧录。
例如:
APP1 keil编辑的起始地址0x8002000    向量表偏移0x2000。
APP2 keil编辑的起始地址0x8002000 。向量表偏移0x12000 ,APP2采用USB写入FLASH 0x8012000的地址。

IAP跳转 APP1 为0x8002000,跳转 APP2 为 0x8012000。

keil编辑的起始地址都是按照0x8002000,只是放到别的地址了,用IAP跳转到那个地址, 能运行吗?

我的思路能行吗?

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

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3369
金钱
3369
注册时间
2011-11-10
在线时间
207 小时
发表于 2021-2-15 20:09:29 | 显示全部楼层
启动是从8000000处启动,所以这个地址需要一个BOOTLOADER程序。
回复

使用道具 举报

24

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2013-8-15
在线时间
6 小时
 楼主| 发表于 2021-2-16 20:14:38 | 显示全部楼层
c2007s 发表于 2021-2-15 20:09
启动是从8000000处启动,所以这个地址需要一个BOOTLOADER程序。

iap肯定是8000000 开始的
回复

使用道具 举报

2

主题

685

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3448
金钱
3448
注册时间
2017-7-4
在线时间
869 小时
发表于 2021-2-17 22:52:21 | 显示全部楼层
可以实现,但比较繁琐,要编译两次。
回复

使用道具 举报

34

主题

252

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
473
金钱
473
注册时间
2020-5-11
在线时间
217 小时
发表于 2021-2-18 11:21:27 | 显示全部楼层
感觉好像不是很清楚,我也做过两个app的iap,首先根据你的描述我有一些看法 1.keil编辑的两个app起始地址不能是一样的,会从编辑的地址这里存,所以app1起始地址为0x8002000    向量表偏移0x2000,   app2起始地址0x8012000    向量表偏移0x12000 ,iap就是根据一些逻辑跳转到你要开始的起始地址,,,,,,,可以实现的,我已经试过了
回复

使用道具 举报

80

主题

931

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3348
金钱
3348
注册时间
2013-5-28
在线时间
468 小时
发表于 2021-2-18 16:35:59 | 显示全部楼层
本帖最后由 聚东风 于 2021-2-18 16:38 编辑

1.单片机上电复位,不管你KEIL起始地址是什么鬼,正常而言,STM32都是从0x08000000开始,所以你如果这里没有程序,那就不会正常运行,而你这里要放的就是bootloader.
2.你对起始地址以及偏移的理解有误,至少就我测试来说,你起始地址就是你的APP生成的位置,就相当于一个APP_BASE的地址.所有不指定地址的数据全部是基于这个标准.
而向量表偏移,说的是SCB里面的VTOR寄存器的偏移,这个偏移是告诉硬件,这个中断向量表存在偏移的.这个偏移量得跟起始地址对应.

如果是我,就申请一段空间,这个空间存放APP地址.你就按这个地址转跳过去就好了.
你如果KEIL都是起始地址都是0x08002000,那绝对是重复覆盖的.
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2021-2-19 11:16:35 | 显示全部楼层
两个APP的起始地址怎么能一样?那不是直接覆盖了吗?而在0x12000没有对应的APP代码,向量直接偏移过去找不到对应的中断响应程序,程序就跑飞了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-29 00:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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