ren0zhe 发表于 2017-5-8 15:34:30

yklstudent-1794 发表于 2017-5-8 15:30
用HEX文件啊,里面带起始地址,该放哪里就放置到哪里

额,首先IAP,应该没人用hex吧,j-flash下载用hex方便;其次,每次编译都重新写地址,太麻烦,还得记录地址,现在想实现的是,固件更新到一个目前程序不用的地址上面,不管特意根据位置再生成bin文件

zbber 发表于 2017-5-8 21:19:32

两个APP交叉升级和升级单个APP的区别不大

chifen 发表于 2017-5-8 22:37:54

IAP做下载 第一个是偏移地址,就是从哪运行,第二是中断向量就是 中断入口同时要改,如果你是两个 相同的IAP ,那偏移和中断向量地址你是怎么处理的 ,
还有一个 第一次运行的入口地址你想怎么实现跳转你想进的IAP地址呢

ren0zhe 发表于 2017-5-9 09:31:59

zbber 发表于 2017-5-8 21:19
两个APP交叉升级和升级单个APP的区别不大

那请问下两个APP交叉升级时。升级用的bin文件的向量表偏移地址 和 keil设置的IROM1那里的地址 是如何处理的?

ren0zhe 发表于 2017-5-9 09:33:48

chifen 发表于 2017-5-8 22:37
IAP做下载 第一个是偏移地址,就是从哪运行,第二是中断向量就是 中断入口同时要改,如果你是两个 相同的IAP ...

目前这也是我遇到的情况,keil设置IROM1那里不区分APP1和APP2时,交叉升级就会有问题,如果区分生成bin文件,感觉体验特别不好啊

waiman-156411 发表于 2017-5-9 09:51:50

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

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

ren0zhe 发表于 2017-5-9 10:41:58

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


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

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


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


我对比了下,用keil修改IROM1那里的起始地址后生成的两个bin文件如下:

地址不同的很多啊,我试着把APP1位置的bin文件里的地址按照APP2位置的bin的地址修改,还是不能用的

waiman-156411 发表于 2017-5-9 14:00:36

这堆地址就是中断向量表,其实,你可以用另一种方法,就是IAP更新代码的时候,跳过不更新这一段区域。或者刷除这段区域之后,写入固定的地址值也行。

chifen 发表于 2017-5-9 23:36:23

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

hjl2832 发表于 2017-5-10 09:12:33

keil编译时,总是只能默认一个地址启动,要做不同的地址启动,要将不同的复位地址对应不同的中断向量表,这个只能是生成2个BIN文件来单独加载,没办法同时识别2个启动地址的。
页: 1 [2] 3
查看完整版本: STM32F1的IAP程序,APP1和APP2两个应用程序交替更新的问题