在arm9上定义两个执行区

时间:2017-10-02 14:45:50

标签: arm scatter keil linkage

我正在使用ARM 9,所有代码都存储在闪存中。 Flash包含引导程序(引导加载程序)和两个加载区域。

如何构建二进制文件以便我可以使用相同的二进制文件并将其存储在加载区1或加载区2中?

使用分散文件我配置了加载区域和执行区域。 如果我从加载区1加载二进制文件,则输出二进制文件正常工作。

然而,如果将二进制文件放入闪存中以进入加载区域2,我就会遇到问题。 这是因为二进制文件包含散点文件的结果,绝对地址与加载区域1匹配。因此,当分散加载开始时,arm将从区域1访问地址而不是从区域2加载。

我读过关于PI(位置独立性)的选项,但不知道它有何帮助。

PS。我的应用程序支持sw升级,我可以从区域1加载, 但如果我需要升级,那么我下载新的二进制文件加载区域2并从图像2加载。下次升级我会将新图像下载到区域1,并从图像1加载等。

flash有下一个加载区域: LR0:不重要。
LR1:0x8100000,大小:yyy(这是加载区域1) LR2:0x8200000,大小:yyy(这是加载区域2)。

默认情况下,我从LR1加载(这是应用程序) 对于SW升级,我将图像下载到LR2 现在我想从LR2加载这个图像 我的图像链接到LR2的负载 - 然后没问题(因为寻址匹配此区域) 但是我不知道如果图像将存储在LR1或LR2中,因此存在问题。

提前致谢。

0 个答案:

没有答案