• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

wb-code

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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语言编写业务逻辑。

posted on 2026-01-13 00:10  心事不在脸上  阅读(17)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3