指定了程式編譯的起始連結位址0x87800000,那麼編譯時候就按照順序編譯出機器碼。在前面的代碼先編譯,是以定位位址也靠前。可以看出,Reset_Handler函數在32行開始,是以編譯的值就不是0x87800000,而是靠後了87800020。但是Reset_Handler函數運作是最靠前的(上電運作的第一個函數,看我這篇文章arm cortex-A中斷基本知識和通用彙編中斷服務函數模闆(必讀!!!)),是以隻需要在第一行跳轉給它即可。這當然是不能同時在前面啦,前面又要放中斷向量表,那就沒法放Reset_Handler函數的具體實作的機器碼了嘛~
也就是說編譯順序,和運作順序是不一樣的。下面是cortex-a核心處理器過程,一目了然。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iZyAjM4UTZ0UjZzYmZkFTO1MTZmRmZ2MjZ1MDOiRWM18CX0AzLcdDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL3M3Lc9CX6MHc0RHaiojIsJye.png)