您的位置:首页 > 编程语言

LPC2xxx系列ARM启动代码分析 Init.s

2009-11-26 21:04 323 查看
;----------------可参照http://hi.baidu.com/hmos/blog/item/461babd358127434970a1677.html--------

;引入的外部标号在这声明

IMPORT __main ;C语言主程序入口

IMPORT InitStack ;初始化堆栈

IMPORT TargetResetInit ;目标板基本初始化

IMPORT |Image$$RO$$Limit| ;// 声明输入ROM区中的RW地址(即:存储RO代码最后地址的下一地址)

IMPORT |Image$$RW$$Base| ;// 声明输入RAM区的开始地址

IMPORT |Image$$ZI$$Base| ;// 声明输入零初始化区的开始地址

IMPORT |Image$$ZI$$Limit| ;// 声明输入零初始化区的末地址的下一地址



;给外部使用的标号在这声明

EXPORT Reset

EXPORT __rt_div0

EXPORT __user_initial_stackheap

;段声明

CODE32

AREA Init,CODE,READONLY



;/*********************************************************************************************************

;** 函数名称: Reset

;** 功能描述: 复位入口

;**

;** 输 入: 无

;**

;** 输 出: 无

;**

;** 全局变量: 无

;** 调用模块: 无

;**

;********************************************************************************************************/

Reset

BL InitStack ;初始化堆栈

LDR r0, =|Image$$RO$$Limit|

LDR r1, =|Image$$RW$$Base|

LDR r3, =|Image$$ZI$$Base|



CMP R0,R1

BEQ NoRW



LoopRw

CMP r1, r3

ldrcc r2, [r0],#4

strcc r2, [r1],#4

bcc LoopRw



NoRW

ldr r1, =|Image$$ZI$$Limit|

mov r2, #0



LoopZI

CMP r3, r1

strcc r2, [r3], #4

bcc LoopZI

BL TargetResetInit ;目标板基本初始化

;跳转到c语言入口

B __main

;/*********************************************************************************************************

;** 函数名称: __user_initial_stackheap

;** 功能描述: 库函数初始化堆和栈,不能删除

;**

;** 输 入: 参考库函数手册

;**

;** 输 出: 参考库函数手册

;**

;** 全局变量: 无

;** 调用模块: 无

;**

;********************************************************************************************************/

__user_initial_stackheap

LDR r0,=bottom_of_heap

MOV pc,lr

;/*********************************************************************************************************

;** 函数名称: __rt_div0

;** 功能描述: 整数除法除数为0错误处理函数,替代原始的__rt_div0减少目标代码大小

;**

;** 输 入: 参考库函数手册

;**

;** 输 出: 无

;**

;** 全局变量: 无

;** 调用模块: 无

;**

;********************************************************************************************************/

__rt_div0

B __rt_div0

;/* 分配堆空间 */

AREA Myheap, DATA, NOINIT, ALIGN=2

bottom_of_heap SPACE 256 ;库函数的堆空间

END

;/*********************************************************************************************************

;** End Of File

;********************************************************************************************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: