在考虑为什么要重定位的问题之前,我们首先要明白一下几点:
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的重定位。
关键字:ARM中 链接地址 重定位
引用地址:
ARM中的链接地址为什么ARM要重定位
推荐阅读最新更新时间:2024-03-16 14:58
DCS控制器中采用ARM处理器的冗余设计
在自动化的许多领域,有效性的要求越来越高,因而对自动化系统的容错水平的要求也变得越来越高,尤其在设备停机代价非常大的场合。为了满足这些严格的要求,在DCS系统中通常采用冗余技术,这样才能够满足这些领域所需要的安全性、可靠性和有效性的标准。 在DCS控制系统中,分布处理单元是系统关键的部分。当前这些分布处理单元的控制器往往是基于86系列CPU建构的,这种架构目前被广泛采用。但是由于86系列分布处理单元的特点,导致现在的控制器处理单元存在很多的缺点,如放热量大等。而且在封闭的环境中,这些问题始终很难解决。随着很多低功耗技术的发展和低功耗控制器的出现,分布处理单元的CPU可以有更多的选择,尤其是低功耗的控制器产生很少的热量,且可以使系统
[工业控制]
ARM学习中LPC2104的Boot与Remap详解
开场白 最近在学习ARM的过程中,遇到了一些以前在8位机、16位机应用中所没有见过的专业术语。其中,比较困扰和麻烦的两个名词术语就是“Boot”与“Remap”。同时,在网上也经常见到有网友就这两个技术名词提出疑问。好在当今网络是如此发达,使得我们可以很快就得到许多老师和老鸟的解答。经过这一段时间的阅读与实践,算是将这个概念基本给理出了个头绪,借此机会,以自己的理解总结一下,贴到BBS上来,与广大网友们分享,如有不当之处,板砖且慢,因为我贴此文的目的是抛“砖”引“玉”,不是引“砖”!Bow! 两个专业名词—非易失性存储器和易失性存储器 非易失性存储器:指掉电后在相当长时间内依然能有效保存数据的存储器。如EEPRO
[单片机]
ARM基础知识教程(三):ARM中异常中断的种类
**复位(RESET) ** 当处理器复位引脚有效时,系统产生复位异常中断,程序跳转到复位异常中断处理程序处执行。复位异常中断通常用在下面几种情况下:系统加电时;系统复位时;跳转到复位中断向量处执行成为软复位。 **未定义的指令** 当ARM处理器或者是系统中的协处理器认为当前指令未定义时,产生未定义的指令异常中断,可以通过改异常中断机制仿真浮点向量运算。 **软件中断** 这是一个由用户定义的中断指令。可用于用户模式下的程序调用特权操作指令。在实时操作系统中可以通过该机制西线系统功能调用。 **指令与取终止(PrefechAbort) ** 如果处理器预取的指令的地址不存在,或者该地址不允许当前指令访问,当被预取的指令执行
[单片机]
基于ARM单片机中的部分寄存器地址为什么会相差4
图中是LPC1114用户手册系统控制模块(SYSCON)中的部分寄存器,请看红色框内,地址相差0x4。为什么会相差4?很多初学者问我这个问题,高手就请绕过吧。 计算机、单片机都是以字节为单位进行存储的。这里的4就是4个字节的意思。上面列举的LPC1114是ARM Cortex-M0内核,STM32是ARM Cortex-M3内核,这两ARM单片机都是32位的。1个字节是8位,4个字节就是32位。32位单片机的寄存器基本上是32位的,8位单片机的寄存器基本上也是8位的。 打开你曾经用过的reg51.h文件,看看普通51单片机的寄存器地址映射,一共不到100个寄存器,几下就写完了。但是ARM单片机内部的模块非常多,寄存器也非常
[单片机]
ARM编译中的RO、RW和ZI DATA区段
ARM程序(指在ARM系统中正在执行的程序,而非保存在ROM中的bin文件)的组成 一个ARM程序包含3部分:RO段,RW段和ZI段 RO是程序中的指令和常量 RW是程序中的已初始化变量 ZI是程序中的未初始化的变量 由以上3点说明可以理解为: RO就是readonly, RW就是read/write, ZI就是zero ARM映像文件的组成 所谓ARM映像文件就是指烧录到ROM中的bin文件,也成为image文件。以下用Image文件来称呼它。 Image文件包含了RO和RW数据。 之所以Image文件不包含ZI数据,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。包含进去反而浪费存储空间。 Q
[单片机]
基于ARM+FPGA的1394总线在TFT-LCD检测系统中的应用
IEEE1394是最初由Apple公司提出的高速串行总线,1995年IEEE(电气和电子工程师协会)将其认可为IEEE1394-1995规范 。但是在IEEE1394-1995中存在一些模糊定义 ,为了解决这些问题,又提出了IEEE1394a规范和IEEE1394b规范。1394作为一种成熟的总线,具有传输速率高(传输速率可达1.6 Gb/s,采用塑料光纤时可达3.2 Gb/s)、支持热插热拔、即插即用、拓扑方便等优点。被广泛应用于军事和航空业,更被美国航天局NASA确定为未来航天器的高速数据总线 。随着1394技术的推广和应用,将其应用到工业控制系统中更是一种趋势,而国内对1394总线在工业系统中的应用研究还不深入。本文主要介绍1
[单片机]
内核裁剪,arm_mini2440开发板中增删自己写的驱动
1、把编译通过的buttons1711.c文件放入 /home/mini2440/linux-2.6.32.2/drivers/char/ 2、修改Makefile 在同一个目录下(第1步中放入.c文件的目录/home/mini2440/linux-2.6.32.2/drivers/char/)打开Makefile: (法1)(不推荐):在obj-y += 后面加上buttons1711.o 然后重新在/home/mini2440/linux-2.6.32.2/中make zImage,再把生成的zImage烧写进开发板就可以用了。 (法2)在底下添加(可找原来类似的位置) obj-$(CONFIG_
[单片机]
ARM在GPS导航系统中的应用
引言 随着我国经济水平的快速发展,汽车行业也蓬勃发展起来。汽车的增长速度远远超过公路的增长速度,汽车拥有量的急剧增加和城市现代化交通建设的相对滞后导致城市交通情况不断恶化。同时,现代物流对运输车辆和货物安全与准时调运的要求、公交与出租车的运营管理、大型的企事业单位日常车辆管理也都对车辆的监控与导航有迫切的需求。面且随着旅游行业的发展,人们急需要一种可以随时随地知道自己方位和目的地的方便设备。 GPS(全球定位系统)具有全球、全天候工作,定位精度高,功能多,应用广的特点,通过GPS接收机可以实现精确的自主定位,这为实现车辆的定位和导航奠定了基础。伴随ARM处理器、嵌入式操作系统、路径优化控制算法和GPS网络的成熟,车辆
[单片机]