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

来源:互联网 发布:淘宝卖家的流程图 编辑:程序博客网 时间:2024/06/06 05:01

;----------------可参照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
;********************************************************************************************************/

原创粉丝点击