startup_stm32fxxx.s启动文件的作用
启动文件主要完成的与C语言运行环境相关的任务包括:
1.初始化堆栈指针(SP)
- 这是第一件也是最重要的事。启动代码会从向量表的第一个条目加载初始堆栈指针的值到SP寄存器。没有正确的栈,C函数的局部变量、函数调用和中断都将无法工作。
2.设置向量表
- 定义中断服务程序的入口地址。向量表通常位于Flash起始位置,包含了复位向量、各种异常(如硬错误、NMI)和中断向量。启动文件将这些地址填入一个表中。
3.初始化静态/全局变量
-
.data段:将存储在Flash中的已初始化全局变量和静态变量的初始值,复制到SRAM中的对应位置。
-
.bss段:将所有未初始化的全局变量和静态变量所在的SRAM区域清零。
-
如果没有这一步,你的全局变量将不会是预设的值(对于.data段),或者可能是一个随机值(对于.bss段)。
4.配置系统时钟
- 大多数启动文件会调用一个SystemInit()函数(通常在system_stm32fxxx.c中)。这个函数负责配置PLL、设置系统时钟频率、使能FPU(如果存在)等。C代码运行需要正确且稳定的时钟。
5.跳转到main()函数
-
在所有初始化工作完成后,启动文件通过一条BL main或BX lr指令,将CPU的执行权正式交给C世界的入口——main()函数。
更准确地说:启动文件是连接芯片硬件上电复位状态与高级语言(C/C++)可执行环境之间的桥梁。 它完成了所有底层、必需的硬件和运行环境设置,从而让开发者可以安心地在main()函数里用C语言编写业务逻辑。
浙公网安备 33010602011771号