代码的加载地址与运行地址

原创 2012年03月24日 18:01:32
下面内容是技术讨论群里的读者的提问:
问:
程序下载到NOR中,在ADS中加载地址却是0x30000000,是SDRAM的地址,难道是调试器自动搬运的?

答:
一个地址是加载 地址一个是运行地址不一样的
你下载到Nor里,是加载地址,ADS里ROBase设置的是运行地址

问:

加载地址是从0开始的吧

答:
Yes

问:
是谁将其复制到RAM中的啊?
ARM核吗?

答:
你所谓的复制是什么意思?
你的代码不复制,没有人会帮忙的

问:
NOR里的代码可以直接运行的啊

答:
是啊
ARM上电就从0开始执行
所以直接运行啊

问:
那那个0x30000000起什么作用?
我要是写成0.。。

答:
那是运行地址,意思是说,代码将来要运行在以这个地址为基地的空间里
所以,运行地址和加载地址可以不一样
所以,运行地址和加载地址不一样的地方,只能用相对跳转

问:
我可不可以这样理解,不超过NOR的容量的代码,那个运行地址意义不大.

答:
你对运行地址和加载地址的概念理解的不深刻

问:
是的

答:
我们的C和汇编要编译成二进制对吧
编译器会把C代码和汇编在链接的时候要给定每一条指令,变量,函数的地址

问:
是的

答:
那这个地址是固定的
这个地址的基址就是运行地址
也就是说,代码在运行的时候,都是在运行地址空间里运行的
但是,通常在嵌入式设备里
内存是需要先初始化的,没有初始化不能使用,代码也就不能运行在里面,而我们编译的二进制文件又是烧写到了Nor之类的ROM里
这样,所以我们要将代码从NOR里搬运到SDRAM里
保证正常运行
所以我们只能将代码的运行地址设置为SDRAM里的一个地址
而烧写的时候的地址,是加载地址

问:
运行地址是作为参数给编译器是这样吧?

答:
只要你保证在NOR里,没有绝对地址跳转就可能运行
但是并不是所有的代码都使用相对跳转的
所以,这也必须要求你的代码搬运到SDRAM里
上面 你说的很对

问:
嗯,谢谢

答:
因为编译器要知道地址后,在你的运行地址基础上编址
你可以将运行地址设置为0x30000000
然后将其在ADS里右键反汇编,看看其指令的地址就知道了

问:
好的

答:
然后你再将运行地址设置为0x0
再反汇编,对比一下,你就理解了
这个理解了,你也就理解了,什么是PIC代码了
你自己去调查一下吧
版权声明:本文为博主原创文章,未经博主允许不得转载。

关于加载地址和运行地址理解

这几天在看uboot的汇编部分,唯一觉得有点弄不懂的就是存储地址和运行地址了,网上看了很多文章,最后还是没有完全通透,云里雾里的,昨晚看了这篇帖子突然恍然大悟,特来谈谈个人的想法,不对的地方还请朋友们...

linux 编译,链接和加载

出处:http://duanple.blog.163.com/blog/static/7097176720111141085197/ 1.   序 最近在折腾各种.so,碰...

编译地址与运行地址

(1)什么是编译地址   32位的处理器,它的每一条指令是4个字节,以4个字节存储顺序,进行顺序执行,CPU是顺序执行的,只要没发生什么跳转,它会顺序进行执行行, 编译器会对每一条指令分配一个编译地...

编译地址 运行地址 相对地址

1、什么是编译地址?什么是运行地址?      32 位的处理器,它的每一条指令是4 个字节,以4 个字节存储顺序,进行顺序执行,CPU 是顺序执行的,只要没发生什么跳转,它会顺序进行执行,...

运行时域和加载时域(运行地址和加载地址)

运行时域和加载时域(运行地址和加载地址) 参考文献:http://hi.baidu.com/hnylcxq/item/3bd13b52bf9875908c12edcf   云边日的空间      ...

BIN、HEX,ELF,AXF文件的区别

嵌入式软件开发中文件格式 1.Bin Bin文件是最纯粹的二进制机器代码, 或者说是"顺序格式"。按照assembly code顺序翻译成binary machine code,内部没有地址标记。...

LWIP使用经验---变态级(好文章)

原文链接: LWIP使用经验 一 LWIP内存管理 数据包管理设置内存大小宏编译开关 二 LWIP启动时序三 LWIP运行逻辑 接收数据包Sequential...

嵌入式Linux学习:浅淡加载地址和运行地址区别&汇编指令ldr和adr的区别

笔者简单的分享了在学习uboot过程中的一些心得,如果有问题,欢迎及时提出;...

运行地址和加载地址

运行地址和加载地址           在连接目标代码时,会提到运行地址和加载地址。这两者有什么区别呢?           加载时地址就是程序放置的地址,运行地址就是程序定位的绝对地址,也即...
  • ce123
  • ce123
  • 2011年11月23日 18:07
  • 11763

运行地址,链接地址,加载地址,存储地址 位置无关码、位置有关码

搞ARM开发时,在连接目标代码会提到运行地址和加载地址。这两者有什么区别呢?其次,网上也有说链接地址和存储地址,那么这四个地址之间有什么区别? 1、运行地址链接地址:他们两个是等价的,只是两种不同的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:代码的加载地址与运行地址
举报原因:
原因补充:

(最多只允许输入30个字)