高级会员

- 积分
- 664
- 金钱
- 664
- 注册时间
- 2019-1-30
- 在线时间
- 111 小时
|
发表于 2020-3-31 14:13:55
|
显示全部楼层
本帖最后由 zhangxiaolin 于 2020-3-31 14:21 编辑
原子哥我有个疑问,先贴段代码。。。。
[code]LR_IROM1 0x08043800 0x0001E000 { ; load region size_region
ER_IROM1 0x08043800 0x0001E000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
这里的0x8043800的代表域基址的数据,可以动态 改变吗?
为啥我想到要做动态改变---->因为在做OTA升级的时候看到了您顶的一个精华贴,链接如下
http://www.openedv.com/forum.php?mod=viewthread&tid=229573
在这篇贴子中,博主说可以实现程序工作在APP1和APP2区切换运行,做这个IAP升级,一般都只会保留一个工作区,一个下载区,但是楼主这个切换的思路,我感觉很好,就尝试写代码。但是现在出现了问题,就是没有办法自动的实现工作区切换,除非每次编译成新的固件程序bin文件之前得手动修改下上边的域基址,只有这样才能实现将工作区由APP1切换到APP2,否则更新完代码后,即使在bootloader中新的固件下载到了APP2区,并且通过debug也看到跳转到了APP2的相关地址,但是程序并没有得到更新,现象是程序还是工作在APP1区。通过调试发现,如果生成APP2固件前没有修改它在flash中的下载地址,程序仍然默认链接到了APP1区。除非在编译生AP2 的bin文件之前,先要通过魔术棒--》Target,修改程序的下载地址,将他也修改为APP2的地址,才可以真正的实现将工作区切换到APP2区,否则不行。我现在也不清楚那边精华帖的作者是怎样在更新app时,实现工作区的自动切换的。
所以,我在想是否可以通过动态修改.sct文件的这个地址,实现动态的跳转,或者有其他的方法可以实现工作区的自动切换,而不是生成新的固件程序时,先要想想当前程序工作在哪个区,然后手动更改新固件的下载地址,这肯定是不可以的。我也不清楚我有没有讲清楚这个问题。希望可以得到原子大哥的指点和回复,谢谢。
|
|