你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F1的IAP程序,APP1和APP2两个应用程序交替更新的问题

[复制链接]
ren0zhe 提问时间:2017-5-5 17:03 /
阅读主题, 点击返回1楼
收藏 2 评论28 发布时间:2017-5-5 17:03
28个回答
waiman 回答时间:2017-5-9 09:51:50
你这个问题,我之前已经遇到过,不单单是固件复位地址的问题,还有中断向量表的位置也要改,所以同一个BIN文件,想不改地址,直接放在两个不同Flash地址执行是不可能的。

但你可以尝试这样操作,开发只生成一个BIN文件,然后自己写一个小软件,每次更新不同区域的APP,直接修改BIN文件里的复位地址和中断向量表偏移地址就行了。

评分

参与人数 1ST金币 +5 收起 理由
zero99 + 5

查看全部评分

ren0zhe 回答时间:2017-5-9 10:41:58
waiman-156411 发表于 2017-5-9 09:51
你这个问题,我之前已经遇到过,不单单是固件复位地址的问题,还有中断向量表的位置也要改,所以同一个BIN ...

你这个问题,我之前已经遇到过,不单单是固件复位地址的问题,还有中断向量表的位置也要改,所以同一个BIN文件,想不改地址,直接放在两个不同Flash地址执行是不可能的。

但你可以尝试这样操作,开发只生成一个BIN文件,然后自己写一个小软件,每次更新不同区域的APP,直接修改BIN文件里的复位地址和中断向量表偏移地址就行了。


“直接修改BIN文件里的复位地址和中断向量表偏移地址”  ,请问这个具体是修改哪里呢?


我对比了下,用keil修改IROM1那里的起始地址后生成的两个bin文件如下:
QQ截图20170509103341.png
地址不同的很多啊,我试着把  APP1位置的bin文件里的地址按照APP2位置的bin的地址修改,还是不能用的
waiman 回答时间:2017-5-9 14:00:36
这堆地址就是中断向量表,其实,你可以用另一种方法,就是IAP更新代码的时候,跳过不更新这一段区域。或者刷除这段区域之后,写入固定的地址值也行。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

chifen 回答时间:2017-5-9 23:36:23
如果你用keil 里选择 用IAP1或IAP2区域 运行,只能做测试,还了一个引导功能,  只能用keil写入或 用其它软件写入指定存放地址, 实际运行还是要从00地址开始的 这段引导如果你跳过,那 IAP2和IAP1只是存放地址不同,对他们来说对方程序只是一个写入地址在哪

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

hjl2832 回答时间:2017-5-10 09:12:33
keil编译时,总是只能默认一个地址启动,要做不同的地址启动,要将不同的复位地址对应不同的中断向量表,这个只能是生成2个BIN文件来单独加载,没办法同时识别2个启动地址的。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

ren0zhe 回答时间:2017-5-10 09:55:29
hjl2832 发表于 2017-5-10 09:12
keil编译时,总是只能默认一个地址启动,要做不同的地址启动,要将不同的复位地址对应不同的中断向量表,这 ...

好吧,谢谢,我也战略放弃了,现在就是APP2做一个定死的出厂固件,APP1一直升级,这样算是妥协点吧
huochaosuma 回答时间:2017-7-19 18:46:42
为什么我通过设置IROM1为不同地址,编译出来的bin文件都是一模一样的呢?
我使用的时STM32F0
virnop 回答时间:2018-11-6 10:33:59
很简单,程序中非常多的指针访问都是通过绝对地址访问的,尤其像中断向量表,存的都是绝对地址,所以在固定位置编译的程序是不可以运行在其他位置的!详细请查中断向量表细节以及指针的储存细节。
lx1990 回答时间:2019-1-24 11:10:31
和我碰到的问题是一样的,如果升级只用一个BIN文件就会出现这样的问题,我定位了下问题,之所以失败是因为中断向量表还是存在之前的程序区,程序升级后中断向量表并没有更新,导致再次交叉升级,程序擦除时,擦除中断向量表后,程序直接死机。不过我现在也是无解了,这个问题,不知道如何去强制更新中断向量表。
eversyou 回答时间:2019-5-17 20:21:04
ren0zhe 发表于 2017-5-8 15:22
这是两个相同的程序,设置IROM1的起始地址分别为 0x8010000 和 0x8021000,
生成的bin文件的复位地址分别 ...

你好,我也遇到了两个app交替升级的问题,你这个问题有好的解决方法吗?keil编译一个生成固件往两个地址都可以升级,这个能行得通吗?
lebment 回答时间:2019-5-18 10:34:04
交替升级可以的,成功过。
zhouxb 回答时间:2019-8-23 11:30:55
楼主例程能共享下么
a316363723 回答时间:2020-7-13 15:20:25
lebment 发表于 2019-5-18 10:34
交替升级可以的,成功过。

大佬,有例程分享吗,最近在学习,谢谢!
lebment 回答时间:2020-7-13 16:57:59
a316363723 发表于 2020-7-13 15:20
大佬,有例程分享吗,最近在学习,谢谢!

自写
12
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版