代码的加载地址与运行地址一致,代码的加载地址与运行地址的区别

  代码的加载地址与运行地址一致,代码的加载地址与运行地址的区别

  程序下载到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码了。

  你自己去调查吧。

代码的加载地址与运行地址一致,代码的加载地址与运行地址的区别