启动文件
1.前言
上一篇博客详细地讲述了一个流程:
可执行程序 -> cpu执行第一条用户代码
这个流程中着重讲述的是HEX文件如何被烧写到STM32内部的指定地址处。(烧写到STM32中的可执行文件不仅只有HEX格式,还有axf、bin。针对不同格式的可执行文件,用不同的工具进行烧写)。
而本篇文章将要详细地描述一个流程:
cpu执行第一条用户代码 -> 调用__main函数
这里需要注意一下,__main是c库中的一个函数,和main函数是有区别的!!!
2.启动文件内容描述
上图中的汇编关键字最好记住,因为比较常用。
关于STM32启动文件的描述,可以去看下我之前写过的一篇博客。
在此基础上,我们继续深入一点。
2.1. DCD指令
STM32启动文件中使用DCD指令的目的是:达到4GB全范围跳转
LDR 指令只能跳到当前PC 4kB 范围内,而B指令能跳转到32MB范围。
2.2. B .
STM32启动文件中使用b . 语句的作用就是: 防止程序跑飞
副作用:触发了一个未知中断的时候会卡死在中断服务函数中,以至于你几乎都找不到!!!
注意:中断服务函数全部都是在启动文件中已经定义好了,如果在外部文件中定义中断服务函数,名称要和事先已经定义好的中断服务函数的名称一样,函数名称的不同代表着地址的不同,因为函数名称本质就是地址!!!
配套视频:
3.STM32启动流程
3.1. 获取栈顶指针
3.2. 跳转到复位中断函数
注意:当程序编译完成之后,SP栈顶指针就已经确定了。
STM32–Code、RO-data、RW-data和ZI-data
配套视频:
4.最小启动配置(加个鸡腿)
注意:设置好SP,就可以运行用户程序
4.1.编写中断向量表
4.2.编写复位中断函数
4.2.1. 设置堆栈指针
4.2.2. 跳转到__main函数
配套视频: