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

原创 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代码了
你自己去调查一下吧
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

编译地址与运行地址

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

《C编译原理》程序的加载地址与运行地址

一、程序的加载地址 程序被加载到RAM中的地址;这个不能由编译器决定、也就是不能由编译参数决定!由该模块的调用者决定! 因为程序在nandflash中不能运行,所以需要加载到RAM中。 一般我们必须在...

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

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

运行地址和加载地址

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

加载地址与运行地址

要是做过uboot开发,就是会遇到过运行地址与加载地址的概念,确实比较抽象与模糊,网上很多解释都是说运行地址就是加载地址,还有就是他们有很大的关系。其实他们根本一点关系都没有,但是很巧合他们很多时候都...

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

下面内容是技术讨论群里的读者的提问: 问: 程序下载到NOR中,在ADS中加载地址却是0x30000000,是SDRAM的地址,难道是调试器自动搬运的? 答: 一个地址是加载 地址一个是运...

运行地址和加载地址

运行地址和加载地址 http://blog.csdn.net/ce123 在连接目标代码时,会提到运行地址和加载地址。这两者有什么区别呢? 加载时地址就是程序放置的地址,运行地址就是程序定位的绝...

运行地址和加载地址

在连接目标代码时,会提到运行地址和加载地址。这两者有什么区别呢?           加载时地址就是程序放置的地址,运行地址就是程序定位的绝对地址,也即在编译连接时定位的地址。如果程序是在f...

运行地址和加载地址

在连接目标代码时,会提到运行地址和加载地址。这两者有什么区别呢?           加载时地址就是程序放置的地址,运行地址就是程序定位的绝对地址,也即在编译连接时定位的地址。如果程序是在fla...

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

笔者简单的分享了在学习uboot过程中的一些心得,如果有问题,欢迎及时提出;
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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