启动代码看这里:
http://blog.csdn.net/chehlcy/article/details/5164472
在启动文件我们看到了__main和用户写的main,这2个是有区别的,大概流程如下:
1、复位第一条指令:Reset_Handler PROC,这里指定为 LDR R0, =__main。表示调用库函数__main,当然,我们可以在__main前做点事情,比如PLL初始化等。
2、__main()的执行流程参考:
http://www.rritw.com/a/bianchengyuyan/_NET/20120611/128129.html
跟一下汇编,大概是__scatterload()->__rt_entry()->__user_setup_stackheap()
3、最后调用用户的main()函数。
4、可以不使用C库初始化函数__main()直接调用用户的main()【或别的定义!】,这个可以google一下。