STM32启动文件分析

RAM和Thumb指令

在这里插入图片描述
   ARM指令中的程序0x0800,0bf0相应的在中断向量表中的地址是0x0800,0bf1这是因为,Cortex-M4只能跑在Thumd指令下,两个的区别就是最低位不同。

				   - Set the initial SP//设置初始化SP指针
  *                - Set the initial PC == Reset_Handler,//程序计数值
  *                - Set the vector table entries with the exceptions ISR address
  * 				//设置中断向量表作为ISR地址的入口
  *                - Branches to main in the C library (which eventually calls main()).
  * 				//进入main的分支,最终通过main()函数

	Stack_Size		EQU     0x1000

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

1 Static- 栈空间
  EQU:宏定义的伪指令,与C语言的#define相当,Stack_Size=0x1000(4K)的空间。
  AREA:告诉汇编器,这是一段新的代码段或数据段,STACK表示段名,可以任意命名,NOINIT 表示不初始化;READWRITE 表示可读可写,ALIGN=3,表示按照2^3对齐,即8 字节对齐。
  SPACE::用于分配一定大小的内存空间,单位为字节。这里指定大小等于Stack_Size。标号__initial_sp 紧挨着SPACE 语句放置,表示栈的结束地址,即栈顶地址,栈是由高向低生长的

Heap_Size      EQU     0x200

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

2 Heap- 堆空间
  EQU:宏定义的伪指令,与C语言的#define相当,Heap_Size=0x200(1K)的空间。
  AREA:告诉汇编器,这是一段新的代码段或数据段,HEAP表示段名,可以任意命名,NOINIT 表示不初始化;READWRITE 表示可读可写,ALIGN=3,表示按照2^3对齐,即8 字节对齐。
  __heap_base:在申请堆空间前的地址,表示堆的起始地址
  SPACE::用于分配一定大小的内存空间,单位为字节。这里指定大小等于Heap_Size。标号__heap_limit 紧挨着SPACE 语句放置,表示堆的结束地址,堆是由低向高生长的

  当全局变量用了static 声明了,那么这个变量,只能够在当前文件使用。

变量和堆栈

Stack主要用于局部变量、函数调用时现场保护和返回地址、函数的形参、数组。当栈空间不足的时候,很容易引发硬件错误

Cortex-M4向下生长满栈模式

在这里插入图片描述
在这里插入图片描述
PUSH:SP指针指向存入的最后的值的位置,当有新的数据过来,SP的值先自减4字节在存入新的值。
在这里插入图片描述

POP:SP指针指向存入的最后的值的位置,先从SP指针处读取上一次压入的值,SP的值在自增4字节
在这里插入图片描述
  栈操作,先入后出:

MAP文件

  MAP文件是编译后生成的内存映像报告文件
代码编译出来的结果:
RO-Code:代码占用的空间;
RO-data:Read Only 只读常量的大小,如const型;
RW-data:(Read Write) 初始化了的可读写变量的大小;
ZI-data:(Zero Initialize) 没有初始化的可读写变量的大小。ZI-data不会被算做代码里因为不会被初始化,由编译器初始化为0

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值