OpenEdv-开源电子网

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

IAP功能(如何用同一份HEX文件升级不同地址区?)

[复制链接]

10

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2013-9-24
在线时间
4 小时
发表于 2014-8-11 14:28:24 | 显示全部楼层 |阅读模式
5金钱
    我有个项目,需要应用IAP的功能,分3个区,BOOT区,APP1区,APP2区。BOOT的程序功能是:启动时判断两个区的版本,看哪个区版本更高就执行哪个。IAP功能是在APP1或者APP2中升级的。升级时我也是自动判断哪个版本是未执行的,就升级未执行的区。现在遇到的问题是,我想要用同一份HEX文件去升级任何一个区,可以这样做吗?还是说一定要编译两份不同区的HEX文件对应做升级?如果是这样的话很就不方便客户去升级,他可能也分不清楚应该选用哪个HEX文件了,而且容易出错。请问各位高手,有什么办法可以做到同一份HEX文件去升级任何一个区

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

使用道具 举报

4

主题

200

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2012-12-19
在线时间
0 小时
发表于 2014-8-11 15:16:43 | 显示全部楼层
設置標誌根據標誌執行不同的程序。。這個標誌由BOOTLOADER寫入
目前在玩STM32,BBB,RPi
回复

使用道具 举报

10

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2013-9-24
在线时间
4 小时
 楼主| 发表于 2014-8-11 15:37:41 | 显示全部楼层
回复【2楼】w0rmis20:
---------------------------------
楼上可能没有明白我说的什么,我是想要用同一份HEX文件去升级任何一个区,因为不同的区中断向量会不同,相同的程序在KEIL 的OPTION里Target设置不同的编译地址,中断向量表是不同的,所以说一份HEX文件的升级地址是要和OPTION里Target设置的一样才能正常运行。我希望的是有什么办法可以用同一份HEX文件去升级任何一个区。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2014-8-11 18:13:50 | 显示全部楼层
自己写上位机,协议里面指定HEX要更新到哪个区。就完事了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

200

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2012-12-19
在线时间
0 小时
发表于 2014-8-12 08:04:56 | 显示全部楼层
你要實現兩個APP功能還必須用一個HEX文件。有兩種方法,寫一個程序,更具標誌位分別執行不同的APP功能,很麻煩,很複雜,好處可以生成單個HEX文件。第二種,把兩個APP 的HEX打包,由BOOTLOAD來判斷更新哪個。難點在於怎麼打包,怎麼用BOOTLOAD解包。這個協議你得自己設計。
目前在玩STM32,BBB,RPi
回复

使用道具 举报

10

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2013-9-24
在线时间
4 小时
 楼主| 发表于 2014-8-12 08:29:28 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
这个项目是客户要求的,我们必须按照客户给的文件协议来做的,它要求升级时不能影响正常工作,还需要响应用户的任何操作,比如说串口命令,CAN命令等,所以我们IAP功能就必须在应用程序中执行。另外它的协议中还有两个应用区相互切换的命令,所以说两个程序都需要能够正常启动。他们有个系统,以前用的单片机是飞思卡尔的MCF5216/MCF5282,这款单片机就是这样做的。我们现在的项目是另外做一个模块,是要加入他的系统当中去的,所以必须和他以前的系统兼容。
回复

使用道具 举报

10

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2013-9-24
在线时间
4 小时
 楼主| 发表于 2014-8-12 09:37:50 | 显示全部楼层
回复【5楼】w0rmis20:
---------------------------------
我就将两个APP打包,由上位机去判断该发哪个APP,感谢w0rmis20,原子哥,还有另外一个帖子中的 shihantu给我提示。
回复

使用道具 举报

10

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2013-9-24
在线时间
4 小时
 楼主| 发表于 2014-8-12 09:38:11 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
我就将两个APP打包,由上位机去判断该发哪个APP,感谢w0rmis20,原子哥,还有另外一个帖子中的 shihantu给我提示。
回复

使用道具 举报

15

主题

69

帖子

0

精华

高级会员

Rank: 4

积分
684
金钱
684
注册时间
2016-8-21
在线时间
125 小时
发表于 2022-2-27 20:48:35 | 显示全部楼层
正点原子 发表于 2014-8-11 18:13
自己写上位机,协议里面指定HEX要更新到哪个区。就完事了。

原子哥,目前已实现指定更新到哪个区了,发现更新两次才能成功,查找到原因是当程序更新到B区的时候,BootLoader中跳转地址是B区,但是并没有跳转到B区,还是跳转到A区,我想问一下,这种交替更新程序时,用户APP程序中的中断向量表的偏移地址怎么处理?只有一个区时,中断向量表的偏移地址是固定的
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2022-2-27 23:41:41 | 显示全部楼层
kui 发表于 2022-2-27 20:48
原子哥,目前已实现指定更新到哪个区了,发现更新两次才能成功,查找到原因是当程序更新到B区的时候,Boo ...

你想跳转到哪里,就设置哪里的偏移量哦
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

64

帖子

0

精华

高级会员

Rank: 4

积分
946
金钱
946
注册时间
2014-11-2
在线时间
367 小时
发表于 2022-2-28 04:11:07 来自手机 | 显示全部楼层
正点原子 发表于 2022-2-27 23:41
你想跳转到哪里,就设置哪里的偏移量哦

单单设置偏移量是不行的,他程序那么大,程序里面肯定会有绝对地址调用,比如程序的某个函数的地址是a区的,你把它写在b区里面,实际执行时还是调用到a区的地址去,所以只有更新2次才正常,因为第一次更新到b区不能执行,再更新一次就更新到a区了,如果非要a,b区的做,只能相同app也要分a,b区独立程序,更新a区APP就写到a区,b区的APP就写到b区
回复

使用道具 举报

15

主题

69

帖子

0

精华

高级会员

Rank: 4

积分
684
金钱
684
注册时间
2016-8-21
在线时间
125 小时
发表于 2022-3-1 13:20:37 | 显示全部楼层
way2888 发表于 2022-2-28 04:11
单单设置偏移量是不行的,他程序那么大,程序里面肯定会有绝对地址调用,比如程序的某个函数的地址是a区 ...

想来想去也只能让程序也分A、B区了,每次更新程序之前,查看一下APP运行的哪个区,然后在keil中的Options for Target中改变一下ROM的起始地址了,目前是这样做的,还没想到只用一个APP程序交替更新A区和B区程序的更好方法
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-28 03:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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