硬汉嵌入式论坛

 找回密码
 立即注册
查看: 475|回复: 5
收起左侧

[有问必答] 关于bootloader与多APP的问题【已解决】

[复制链接]

3

主题

17

回帖

26

积分

新手上路

积分
26
发表于 2025-7-9 17:39:00 | 显示全部楼层 |阅读模式
本帖最后由 sfd123 于 2025-7-10 17:00 编辑

STM32F407有一个bootloader和2个APP,APP的位置分别在0x8020000和0x8080000,假定两个APP分别是A 和 B,但是写入A和B时没法确定写在哪个位置,可能A写在0x80200000,也可能写在0x08080000,这样在APP里边没法配置中断向量表NVIC_SetVectorTable(NVIC_VectTab_FLASH, ***********);   A里边如果配置了0x20000,但是如果写到0x08080000位置了怎么办?

这个问题大家是怎么处理的?

谢谢!


回复

使用道具 举报

0

主题

49

回帖

49

积分

初级会员

积分
49
发表于 2025-7-9 18:36:56 | 显示全部楼层
本帖最后由 dukelec 于 2025-7-10 08:34 编辑

要搞 A B 这种,就只能 A 写 A 的位置,B 写 B 的位置
如果是 IAP,我不喜欢这么搞,我只使用一个 APP 的位置,弄一个剩余空间放新固件,BL 上电的时候判断剩余空间是否有新 APP,有的话就搬运覆盖现有 APP 即可
硬是要像你说的那样,编译的时候要编译成 -fPIC 浮动的形式,可以在任何地址都可以运行(效率会低,体积会大),然后 main 函数判断一下自己所在位置,推算一下向量表地址就可以NVIC_SetVectorTable了

向量表本身的内容,可以在bootloader检查,如果不匹配,增减一个偏移再更新到flash
回复

使用道具 举报

34

主题

206

回帖

308

积分

高级会员

积分
308
发表于 2025-7-10 08:59:24 | 显示全部楼层
搞个地址存放下要跳转运行的APP位置
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2025-7-10 09:07:49 | 显示全部楼层
不行,这个不仅仅是中断向量表问题,你的0x8020000固件是无法运行到0x8080000,因为你的固件都是与地址有关系的,也就是固定地址的,并不是动态APP固件,只有动态APP固件才可以随意地址运行。
回复

使用道具 举报

3

主题

17

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2025-7-10 17:00:00 | 显示全部楼层
多谢以上各位的指点! 我还是按照  dukelec  的方法,写在固定位置好了。
回复

使用道具 举报

21

主题

81

回帖

144

积分

初级会员

积分
144
发表于 2025-7-14 09:39:41 | 显示全部楼层
eric2013 发表于 2025-7-10 09:07
不行,这个不仅仅是中断向量表问题,你的0x8020000固件是无法运行到0x8080000,因为你的固件都是与地址有关 ...

正解,芯片如果有双bank,就可以两个地址运行,F429是可以的,我做过小实验测试过
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-11 23:49 , Processed in 0.041026 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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