天天看點

STM32的啟動檔案解讀

       用stm32開發的人都添加過啟動檔案吧,一般是keil mdk給我們預設添加的,但是如果要更新換代,還是要手工添加或者修改下,這時候就必須要弄明白它的啟動檔案裡到底是什麼鬼了,不然不明不白的就去修改它,肯定會出問題的啦。

      在一大堆注釋後,它首先對棧和堆的大小進行定義,并在代碼區的起始處建立中斷向量表,從__Vectors 開始到__Vectors_end結束。

      其第一個表項是棧 頂位址,第二個表項是複位中斷服務入口位址。假設STM32被設定為從内部FLASH啟動中斷向量表起始地位為0x8000000, 則棧頂位址存放于0x8000000處,而複位中斷服務入口位址存放于0x8000004處。當STM32遇到複位信号後,則從0x80000004處取出複位中斷服務入口位址繼而執行複位中斷服務程式,然後跳轉__main函數,最後來到C的世界。

      下面的14個表項為系統異常(實際隻用了11個)的中斷服務入口位址。在下面就是外部中斷的服務入口了。

      我們會看到這些DCD指令,它的作用是開辟一段空間,其意義等價于C語言中的位址符“&”。開始建立的中斷向量表則類似于使用C語.其每一個成員都是一個函數指針,分别指向各個中斷服務函數。

      特意百度了下“B   .”的意思,這裡”.“ 就是代表目前位址哈。