STM32启动过程分析

        这里的启动过程是指从 STM32 芯片上电复位执 行的第一条指令开始,到执行用户编写的 main 函数这之间的过程。我们编写程序,基本都是 用 C 语言编写,并且以 main 函数作为程序的入口。但是事实上,main 函数并非最先执行的, 在此之前需要做一些准备工作,准备工作通过启动文件的程序来完成。

1. map 文件分析

1.1 程序段交叉引用关系(Section Cross References)

这部分内容描述了各个文件(.c/.s 等)之间函数(程序段)的调用关系

1.2 删除映像未使用的程序段(Removing Unused input sections from the image)

这部分内容描述了工程中由于未被调用而被删除的冗余程序段(函数/数据)

1.3 映像符号表(Image Symbol Table)

        映像符号表(Image Symbol Table)描述了被引用的各个符号(程序段/数据)在存储器中 的存储地址、类型、大小等信息。映像符号表分为两类:本地符号(Local Symbols)和全局符 号(Global Symbols)。

        本地符号(Local Symbols)记录了用 static 声明的全局变量地址和大小,c 文件中函数的 地址和用 static 声明的函数代码大小,汇编文件中的标号地址(作用域:限本文件)。

        全局符号(Global Symbols)记录了全局变量的地址和大小,C 文件中函数的地址及其代 码大小,汇编文件中的标号地址(作用域:全工程)。

1.4 映像内存分布图(Memory Map of the image)

        映像文件分为加载域(Load Region)和运行域(Execution Region)。一个加载域必须有 至少一个运行域(可以有多个运行域),而一个程序又可以有多个加载域。加载域为映像程序的实际存储区域,而运行域则是 MCU 上电后的运行状态。

1.5 映像组件大小(Image component sizes)

        映像组件大小(Image component sizes)给出了整个映像所有代码(.o)占用空间的汇总 信息。这部分是程序实际功能可执行代码的存储空间。

2. 启动模式

3. 启动过程

4. 启动文件分析

栈空间的开辟

堆空间的开辟

初始化中断向量表

用户堆栈初始化

可以知道地址 0x0800 0000 的值是 0x2000 0788,地址 0x0800 0004 的值是 0x0800 01CD,即堆栈指针 SP =0x2400 0BD8,程序计数器指针 PC = 0x0800 0339(即复位中断 服务程序 Reset_Handler 的入口地址),即。因为 CM3 内核是小端模式,所以倒着读。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值