Cortex-Mx启动,备忘,以免将来忘记。
中断向量表不用说,从重置中断开始吧
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
这里一共就执行了两个函数,SystemInit和__main。
我们一般在SystemInit里面配置系统时钟,这里跳过。
__main是我们今天的重点。
__main: 0x080000C0 4804 LDR r0,[pc,#16] ; @0x080000D4 0x080000C2 4685 MOV sp,r0 #设置栈顶 _main_scatterload: 0x080000C4 F000F956 BL.W __scatterload (0x08000374) #分散加载(拷贝初始值、清零变量) __main_after_scatterload: 0x080000C8 F000F8D4 BL.W __cpp_initialize__aeabi_ (0x08000274) #C++初始化(全局对象构造函数执行) _main_cpp_init: 0x080000CC 4800 LDR r0,[pc,#0] ; @0x080000D0 0x080000CE 4700 BX r0 #进入C++的main函数
分散加载这里将会初始化我们的全局静态变量
.text:00000000 __scatterload_rt2 .text:00000000 LDR R4, =Region$Table$Base .text:00000002 MOVS R5, #1 .text:00000004 LDR R6, =Region$Table$Limit .text:00000006 B loc_14 .text:00000008 ; --------------------------------------------------------------------------- .text:00000008 .text:00000008 loc_8 ; CODE XREF: __scatterload_rt2+16