单步运行后,马上跳转到初始化CPU的频率。即初始化锁相环,将其锁在一个固定的频率。具体代码如下:
; Setup PLL
IF PLL_SETUP <>
0
LDR R0, =PLL_BASE
MOV R1, #0xAA
MOV R2, #0x55
ffice
ffice" />
; Configure and Enable PLL
MOV R3, #PLLCFG_Val
STR R3, [R0, #PLLCFG_OFS]
MOV R3, #PLLCON_PLLE
STR R3, [R0,
#PLLCON_OFS]
STR R1, [R0,
#PLLFEED_OFS]
STR R2, [R0, #PLLFEED_OFS]
; Wait until PLL Locked
PLL_Loop LDR R3, [R0, #PLLSTAT_OFS]
ANDS R3, R3,
#PLLSTAT_PLOCK
BEQ PLL_Loop
; Switch to PLL Clock
MOV R3,
#(PLLCON_PLLE:OR
LLCON_PLLC)
STR R3, [R0,
#PLLCON_OFS]
STR R1, [R0,
#PLLFEED_OFS]
STR R2, [R0,
#PLLFEED_OFS]
ENDIF ; PLL_SETUP
然后再初始化每一种模式的堆栈,再进行单步运行的时候,下面我们可以看到,它自动跳转到 main()函数:
; Enter the C code
IMPORT __main
LDR R0, =__main
BX R0
IF
EF:__MICROLIB
EXPORT __heap_base
EXPORT __heap_limit
ELSE
这个时候,程序会运行各种 scatterload函数,将我们的堆栈、全局变量等内容拷贝到内存中去。拷贝完后,就正式跳转到我们的 main() 函数中来执行了。

这就是启动代码执行的全过程,呵呵,平时我们看到以为只是执行main()函数就行了,是不是没有想到在执行
main() 函数后还有这么多学问呢?
不懂得地方
为什么我一调试就跳到了这里啊
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
光标指向这里 LDR R0, =__main
BX R0
ENDP
根本就没指向到初始化CPU的频率这些地方 直接跳到LDR R0, =__main