|
发表于 2012-7-30 21:51:08
|
显示全部楼层
本帖最后由 laoshuhunya 于 2012-7-30 21:57 编辑
hai198771 发表于 2012-4-9 14:39 ![](static/image/common/back.gif)
最后的几行没看懂,不知道在做什么。而且这几行代码在复位函数后面,即使被编译了,什么时候执行那几条LDR ...
由C运行时库的__rt_entry函数使用,用于设置栈和堆,同时还初始化C库函数和静态数据,__rt_entry函数执行完成后即跳转到C的main()主函数入口地址并开始执行用户代码。
在__rt_entry函数之前会先运行__main,执行代码和数据复制、解压缩及ZI数据的零初始化。
对编译器来说,函数名称main()具有特殊的含义,只要你的源代码中含有main(),链接器就会强制链接到__main和__rt_entry以执行C运行环境的初始化。如果你不想使用C库,可以把main()函数改名为my_main()或任何你喜欢的名称,这可以减少大约300字节的CODE空间。
;******************************************************************************
; 不使用库的启动代码
; *** 同时适用于ARM Cortex-M4、Cortex-M0系列 ***
; 适用编译工具:KEIL RVMDK4.53
; PID:
; 版本:V1.0
; 日期:2011.06.01
; 设计:laoshuhunya
; E-mail: Jinziyuemm@live.cn
; *****************************************************************************
; 中断向量表,复位时必须位于根执行区0地址处
;******************************************************************************
PRESERVE8
AREA RESET, CODE, READONLY
THUMB
;******************************************************************************
DCD 0x20000800 ; 初始栈指针,可修改
DCD Reset_Handler ; 复位向量
DCD NmiSR ; 非屏蔽异常向量
DCD FaultISR ; 硬故障异常向量
;******************************************************************************
ENTRY ; 复位处理
Reset_Handler
IMPORT my_main
B my_main ; 启动应用程序
;==============================================================非屏蔽中断处理
NmiSR B .
;==============================================================硬故障异常处理
FaultISR B .
;******************************************************************************
ALIGN ; 确保字对齐
END
|
|