您的位置 首页 芯闻

ARM中的链接地址为什么ARM要重定位

在考虑为什么要重定位的问题之前,我们首先要明白一下几点:1.链接地址的定义:我自己理解是,程序被定义的开始执行的内存地址。…

在考虑为什么要重定位的问题之前,咱们首先要了解一下几点:

1. 链接地址的界说:我自己了解是,程序被界说的开端履行的内存地址。

2. 当ARM从nandflash发动的时分,CPU所做的作业是将nandflash中的前8K代码主动的到6410的0地址(即Stepping Stone)中去,然后从0地址开端履行程序。

3. 程序在履行过程中,用链接地址来拜访全局变量。全局变量一般被存放于程序的最后面。

在程序超越8K时,假如不进行重定位,就会产生类似于下面的拜访过错,这将导致程序无法正常履行。

假定咱们界说程序的链接地址为0x50000000,程序从6410的0地址(即Stepping Stone)履行的时分,假如要拜访某个全局变量时,假定其反汇编代码如下:
500000a4 e59f303c ldr r0, [pc, #60] ;r0 = [0x500000e8] =0x00000200
500000a8 e5933000 ldr r0, [r0] ;r0 = [0x00000200]
500000ac ……
……
500000e8 00000200 …….

00000200 :
200: 00000000 ……

咱们能够看出来,r0的值要根据地址0x500000e8处取得,而在Stepping Stone中无法找到0x500000e8这个地址,这样程序就会犯错。所以在程序被CPU拷贝到Stepping Stone后,咱们要先写一段程序初始化nandflash和内存,再利用方位无关的代码将程序从nandflash拷贝到内存中,然后跳转到其它函数持续履行,这便是ARM的重定位。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/xinwen/277067.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们