本文以Arm Cortex-M為例,介紹了在IAR Embedded Workbench中微控制器(MCU)的啟動(dòng)過程。在MCU復(fù)位后,程序計(jì)數(shù)器(PC)會(huì)指向相應(yīng)的復(fù)位向量,并開始執(zhí)行啟動(dòng)代碼(startup code)。如果MCU支持浮點(diǎn)單元(FPU),則在啟動(dòng)過程中,首先會(huì)調(diào)用__iar_init_vfp來初始化FPU,然后繼續(xù)執(zhí)行__iar_program_start。接著,__iar_program_start會(huì)調(diào)用__cmain函數(shù)。在__cmain中,會(huì)先調(diào)用__low_level_init函數(shù),然后調(diào)用__iar_data_init3來進(jìn)行全局和靜態(tài)變量的初始化。在__iar_data_init3中,首先會(huì)調(diào)用__iar_zero_init3來初始化初始值為0的全局和靜態(tài)變量,隨后會(huì)調(diào)用__iar_copy_init3來初始化初始值為非0的全局和靜態(tài)變量。最終,在啟動(dòng)過程的最后階段,會(huì)通過調(diào)用__call_main來跳轉(zhuǎn)到main函數(shù),從而開始執(zhí)行主程序。