指定了程序编译的起始链接地址0x87800000,那么编译时候就按照顺序编译出机器码。在前面的代码先编译,因此定位地址也靠前。可以看出,Reset_Handler函数在32行开始,因此编译的值就不是0x87800000,而是靠后了87800020。但是Reset_Handler函数运行是最靠前的(上电运行的第一个函数,看我这篇文章arm cortex-A中断基本知识和通用汇编中断服务函数模板(必读!!!)),因此只需要在第一行跳转给它即可。这当然是不能同时在前面啦,前面又要放中断向量表,那就没法放Reset_Handler函数的具体实现的机器码了嘛~
也就是说编译顺序,和运行顺序是不一样的。下面是cortex-a内核处理器过程,一目了然。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iZyAjM4UTZ0UjZzYmZkFTO1MTZmRmZ2MjZ1MDOiRWM18CX0AzLcdDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL3M3Lc9CX6MHc0RHaiojIsJye.png)