启动文件的作用

1. 初始化栈顶指针SP
在这里插入图片描述
定义 Stack_Size 为 1KB
汇编一个数据段 名称是 STACK,不要初始化,读写,8Bytes对齐
SPACE分配一个(Stack_Size)1KB的空间
__initial_sp表示栈顶指针

在这里插入图片描述
__heap_base是堆的基地址,__heap_limit是堆的顶部

在这里插入图片描述
PRESERVE8为当前文件的堆 和 栈按照8字节对齐
使用THUMB指令集
在这里插入图片描述

; Vector Table Mapped to Address 0 at Reset
                AREA    RESET, DATA, READONLY
                EXPORT  __Vectors
                EXPORT  __Vectors_End
                EXPORT  __Vectors_Size

EXPORT为全局变量的意思

AREA表示以下的空间,RESET 是空间名,DATA , READONLY是属性,详情参考MDK中的ARM Development Tools
在这里插入图片描述

在这里插入图片描述
2. 初始化程序指针,指向复位程序

; Reset handler
Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]
        IMPORT  SystemInit
        IMPORT  __main

                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP

IMPORT指外部的变量
在这里插入图片描述
在这里插入图片描述
3. 初始化中断向量表(存放的中断的地址)
4. 配置系统时钟
5. 调用main()函数
当中断向量表中的函数,在外部没有实现时,就会使用内部的函数,而这个内部的函数只会进入无限循环
在这里插入图片描述

;*******************************************************************************
; User Stack and Heap initialization
;*******************************************************************************
                 IF      :DEF:__MICROLIB
                
                 EXPORT  __initial_sp
                 EXPORT  __heap_base
                 EXPORT  __heap_limit
                
                 ELSE
                
                 IMPORT  __use_two_region_memory
                 EXPORT  __user_initial_stackheap
                 
__user_initial_stackheap

                 LDR     R0, =  Heap_Mem
                 LDR     R1, =(Stack_Mem + Stack_Size)
                 LDR     R2, = (Heap_Mem +  Heap_Size)
                 LDR     R3, = Stack_Mem
                 BX      LR

                 ALIGN

                 ENDIF

                 END

R0 到 R3存放堆 和 栈 的起始地址和结束地址

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值