Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在arm9上定义两个执行区域_Arm_Scatter_Keil_Linkage - Fatal编程技术网

在arm9上定义两个执行区域

在arm9上定义两个执行区域,arm,scatter,keil,linkage,Arm,Scatter,Keil,Linkage,我使用的是ARM9,所有代码都存储在flash上。 闪存包含引导程序(引导加载程序)和两个加载区域 如何构建二进制文件,以便使用相同的二进制文件并将其存储在加载区域1或加载区域2 使用散布文件,我配置了加载区域和执行区域。 如果我从加载区域1加载二进制文件,输出二进制文件工作正常 然而,若将二进制文件放在闪存中以加载区域2,我将面临一个问题。 这是因为二进制文件包含散布文件的结果,其绝对地址与加载区域1匹配。所以当分散加载开始时,arm将从区域1而不是从区域2访问地址 我读过PI(职位独立)选项

我使用的是ARM9,所有代码都存储在flash上。 闪存包含引导程序(引导加载程序)和两个加载区域

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

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

然而,若将二进制文件放在闪存中以加载区域2,我将面临一个问题。 这是因为二进制文件包含散布文件的结果,其绝对地址与加载区域1匹配。所以当分散加载开始时,arm将从区域1而不是从区域2访问地址

我读过PI(职位独立)选项,但不知道它有什么帮助

另外,我的应用程序支持软件升级,我可以从区域1加载, 但如果我需要升级,我会下载新的二进制文件来加载区域2,然后从图像2加载。下一次升级我将下载新的图像到区域1,并从图像1加载,等等

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

默认情况下,我从LR1加载(这是应用程序)。
对于软件升级,我将映像下载到LR2。
现在我想从LR2加载此图像。
I图像链接到从LR2加载-然后没有问题(因为地址匹配此区域)。
但是,我不知道图像是否会存储在LR1或LR2中,因此会出现问题。


提前感谢。

这不是一个答案,而是一个解决办法:当我遇到这种情况时,我用不同的脚本链接了两次应用程序,用objcopy提取二进制文件,并将二进制文件切碎在一起,以获得每个版本代码的两个(不同)图像。我有兴趣阅读关于如何“正确”使用PIC的答案。嗨,尼克,我的目标是避免创建不同的图像。原因是因为我想生成一个通用图像(事先不知道它是存储在flash上的区域1还是区域2),然后在升级过程中,我的应用程序将决定在哪个区域存储新的二进制文件。因此,基本上我不知道如何使我的分散设置动态令人担忧;运行链接器两次并生成一对匹配的图像解决了我的问题。我将这些图像放在一起,以便在运行时决定加载哪个图像。(我还考虑过使用上面的插槽作为缓冲区,并将所有内容复制到下面的插槽:这需要更复杂的引导加载程序,需要更多的错误检查和两倍的闪存写入流量。)我没有更好的答案。我很想看看是否有更优雅的方式来做这件事。。。