STM32启动文件

startup_stm32f10x_hd.s:

1. 开辟栈空间

Stack_Size  EQU     0x00000400  ;

            AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem   SPACE   Stack_Size
__initial_sp

开辟大小为0x00000400(1kb)的栈,名为STACK,NOINIT即不初始化,READWRITE表可读可写,ALIGN=3表8(2^3)字节对齐
EQU: 宏定义的伪指令,类似于c语言中的#define
AREA: 告诉汇编器开辟一个新的代码段或者数据段
SPACE: 用于分配一个一定大小的内存空间,以字节为单位,这里指定的大小为Stack_size
__initial_sp: 这是一个标号,它紧接在SPACE之后,表栈的开始地址。注意,栈的开始地址是栈顶,ARM是满降栈的,也就是栈由高向低生长。

2. 开辟堆空间

Heap_Size   EQU     0x00000200

            AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem    SPACE   Heap_Size
__heap_limit

    PRESERVE8
    THUMB

堆是用于内存动态分配malloc的,这里开辟大小为0x00000200(512字节)的堆,名字为HEAP,不初始化,可读可写,8字节对齐。__heap_base表示堆的起始地址,__heap_limit表示堆的结束地址。堆是由低向高生长的。
PRESERVE8表指定当前文件的堆栈按照8字节对齐,THUMB表示接下来的指令兼容THUMB指令。THUMB是ARM老的16bit的指令集,现在Cortex-M系列的ARM都使用32bit的THUMB-2指令集,它兼容16bit和32bit的指令。

3. 定义向量表

AREA    RESET, DATA, READONLY
EXPORT  __Vectors
EXPORT  __Vectors_End
EXPORT  __Vectors_Size

“AREA RESET, DATA, READONLY”是定义一个名为RESET的数据段,只读。
“__Vectors”、”__Vectors_End”、”__Vectors_Size”用EXPORT声明的标号,使其具有全局属性,可供外部文件调用。
这个数据段充当一张异常向量表。__Vectors为向量表起始地址,__Vectors_End为向量表的结束地址。两个相减即可算出向量表的大小。当内核去响应一个异常后,对应的异常服务函数就会得到执行。异常向量表则是决定这些服务程序的入口地址。异常向量表其实是一个32位整型数组,每个数组元素代表一种异常,数组元素的值等于服务程序的入口地址。异常向量表的起始地址可以通过NVIC(嵌套向量中断控制器)设置的,NVIC对应该设置地址功能的位复位值为0,所以地址0必须是一张中断向量表。
由手册存储器映像图获知,STM32的0地址处是用来映射的。
这里写图片描述
STM32启动的方式如下:
这里写图片描述
(1)用户闪存存储器: 用户代码烧录在这里,STM32正常启动时就是从这里启动
(2)系统存储器: 实现ISP下载功能。ISP(in-system programming)意为在系统编程。烧录程序时不需要烧录器,PC机通过串口把BIN/HEX文件直接烧录到单片机内部FLASH中
(3)内嵌SRAM: 实现调试器调试功能用
当选择从用户闪存存储器(flash)启动时候,0x0地址就会把flash的起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值