關於nrf52832上電啓動分析

參考文檔地址:https://www.cnblogs.com/strongwong/p/8657639.html

關於nrf52832上電啓動分析:

啓動所需要做的事:

堆棧的初始化、初始化中斷向量表、在進入main之前初始化時鐘

啓動過程中用的.s文件

arm_startup_nrf52.s

定義堆棧,堆棧的數據都時在RAW中

然後定義RESET區域

然後是定位中斷向量表:

第一條指令對應的堆棧,從第二條指令開始進入Reset Handler

在Reset_Handler中會先經SystemInit函數導入,可以理解成初始化時鐘

對於SystemInit的理解:爲啥需要在main之前初始化時鐘,以前看過最標準的理解是,CPU啓動工作的這段時間,內存、外設等設備還沒有啓動,需要CPU分配時鐘來啓動外設,然後分配堆棧空間,並且將存在到flash的數據copy到RAW然後在跳入到main中。

仔細觀察SystemInit函數,發現沒有變量,操作的都是寄存器,個人理解,局部變量就需要分配堆棧地址,而堆棧又是在內存,無法實現。

之後在初始化庫函數,然後最終進入main函數

然後是具體的分析.hex文件

.hex文件和.s文件是一一對應

從圖中可以看到0x00000000的位置是RAW的0x2002080也就數棧的位置

函數地址

 

Reset_Handler      0x00000004 

NMI_Handler        0x00000008

.........

和向量表中的位置是一一對應

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章