1. 程式人生 > >stm32啟動分析,main函式之前幹了啥?

stm32啟動分析,main函式之前幹了啥?

總之,IAR在啟動main函式以前,執行了Reset_Handler,呼叫SystemInit()(ST庫提供)進行時鐘,Flash讀取初始化,並轉入__iar_program_start中執行__low_level_init與__iar_data_init2,並在__iar_data_init2中,先後呼叫__iar_zero_init2與__iar_copy_init2對全域性變數、全域性已初始化變數進行相應的初始化操作。最後,呼叫main()函式執行。

 

系統上電後,MSP(主堆疊指標)和PC兩個暫存器被裝入值,即 0x08000000 地址的值進入MSP,0x08000004 地址的值進入PC,0x08000004 地址儲存的就是復位後執行的函式首地址即 Reset_Handler 的首地址,在進入 Reset_Handler 中執行SystemInit,然後再執行 __iar_program_start,最後在執行main()函式。在 __iar_program_start 中執行了幾個IAR定義的啟動程式碼函式,應該是對全域性變數初始化啥的,將這些資料從ROM中copy到RAM中。

 

所以流程是:

上電  》  獲取MSP和PC  》  進入Reset_Handler  》  執行SystemInit  》  進入__iar_program_start  》  執行__low_level_init  》  進入__iar_data_init2  》  執行__iar_zero_init2  》  執行__iar_copy_init2  》  執行main()函式