代码的加载地址与运行地址一致,代码的加载地址与运行地址的区别
程序下载到NOR,但是ADS中加载的地址是0x30000000,这是SDRAM的地址。是调试器自动携带的吗?
一个地址是加载地址,另一个是运行地址。
你下载到Nor,Nor是加载地址,ADS里的ROBase设置运行地址。
深奥的
加载地址是从0开始吗?
谁把它复制到RAM里了?
ARM内核?
抄袭是什么意思?
如果你的代码没有被复制,没有人会帮助你。
NOR中的代码可以直接运行。
是
ARM从0开始上电。
所以直接运行。
那个0x30000000是干什么的?
如果我写为0。
那是运行地址,也就是说以后代码会在基于这个地址的空间运行。
因此,运行地址和加载地址可以不同。
所以运行地址和加载地址不一样的地方,只能用相对跳转。
不超过NOR容量的代码运行地址我可以理解为意义不大吗?
你对运行地址和加载地址的概念理解不深。
我们的C和汇编应该是编译成二进制的吧?
编译器会链接C代码和汇编,并给出每个指令、变量和函数的地址。
那个地址是固定的。
这个地址的基址就是运行地址。
也就是说,当代码运行时,它运行在运行地址空间中。
然而,通常在嵌入式设备中
内存需要先初始化,不初始化就不能用,代码也不能在里面运行,而且我们编译的二进制文件也像Nor一样烧到ROM里。
这样,只好把代码从NOR移到SDRAM。
确保正常运行。
所以我们只能将代码的运行地址设置为SDRAM中的一个地址。
而烧录时的地址就是加载地址。
运行地址是作为参数给编译器的吧?
只要你保证在NOR中,没有绝对地址跳转的运行是可能的。
但并不是所有的代码都使用相对跳转。
因此,这也需要将您的代码移动到SDRAM中。
你上面说的很对。
因为编译器需要知道地址,并根据你的运行地址进行寻址。
您可以将运行地址设置为0x30000000。
然后在ADS里右键拆解一下,看看它的说明地址。
然后将运行地址设置为0x0。
再拆解一下,对比一下,你就明白了。
明白了这些,你就明白什么是PIC码了。
你自己去调查吧。