硬汉嵌入式论坛

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

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

[复制链接]

3

主题

23

回帖

32

积分

新手上路

积分
32
发表于 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位置了怎么办?

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

谢谢!


回复

使用道具 举报

1

主题

83

回帖

86

积分

初级会员

积分
86
发表于 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
回复

使用道具 举报

38

主题

231

回帖

345

积分

高级会员

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

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

使用道具 举报

3

主题

23

回帖

32

积分

新手上路

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

使用道具 举报

21

主题

83

回帖

146

积分

初级会员

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

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

使用道具 举报

3

主题

11

回帖

20

积分

新手上路

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

佬,固件内部与固定地址的部分内容脱钩,做成变量,在上电时继续需要的偏移量,这可以行吗?
我目前是这么想的,但还不知道怎么去做这部分的动态变量,,只实现了双APP双固件,,,
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120428
QQ
发表于 2025-12-23 10:01:15 | 显示全部楼层
2367643286 发表于 2025-12-22 22:35
佬,固件内部与固定地址的部分内容脱钩,做成变量,在上电时继续需要的偏移量,这可以行吗?
我目前是这 ...

不知道你想说的是不是这个意思

论坛首发,STM32实现动态加载模组(似于Windows的dll),使用MDK编译动态库类
https://forum.anfulai.cn/forum.p ... 9952&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

3

主题

11

回帖

20

积分

新手上路

积分
20
发表于 2025-12-23 16:47:20 | 显示全部楼层
eric2013 发表于 2025-12-23 10:01
不知道你想说的是不是这个意思

论坛首发,STM32实现动态加载模组(似于Windows的dll),使用MDK编译动 ...

https://forum.anfulai.cn/forum.p ... d=129085&page=1
大佬,我是卡在OTA升级,AB面的问题,不能只维护一个APP,需要A程序只能在A地址运行。
但是我想的这个应该是可以解决的,只要把bin文件中与固件地址相关的重新计算就行了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-10 08:05 , Processed in 0.045183 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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