当前位置: 首页 > news >正文

启动文件:0x08000000第一个字是栈顶,第二个字是复位入口

短文标题:启动文件:0x08000000第一个字是栈顶,第二个字是复位入口

你有没有想过一个问题:单片机通电后,执行的第一个指令在哪?为什么程序从main开始跑?不是main,甚至不是Reset_Handler。上电后,硬件自动做两件事:先取栈顶地址,再取复位向量。没有栈,C语言无法运行——所以硬件第一步是设栈,第二步才取第一条指令。上电后硬件自动完成的两件事

  1. 从地址0x08000000读取栈顶地址(__initial_sp)→ 写入MSP(主栈指针)
  2. 从地址0x08000004读取复位向量(Reset_Handler地址)→ 跳转执行

这两个地址固定,由启动文件定义,不可更改。中断向量表的结构(存放在Flash起始)

栈顶地址错误会怎样?

  • 指向ROM(Flash)→ 压栈操作覆盖代码区 → 立即HardFault
  • 超出RAM范围 → 压栈到未映射地址 → BusFault → HardFault
  • 未对齐(奇数地址)→ 总线错误

启动文件写错,单片机连启动都启动不了。

Reset_Handler做了什么?

Reset_Handler:

LDR R0, =SystemInit

BLX R0 ; ① 配置时钟

LDR R0, =__main

BX R0 ; ② C库入口(初始化data/bss,调用main)

SystemInit:配置Flash等待周期、设置PLL、切换系统时钟。

__main(不是main):初始化已初始化的全局变量(.data段)→ 清零未初始化的全局变量(.bss段)→ 最后调用main。

VTOR重定位(Bootloader→APP),通过SCB->VTOR寄存器可将向量表重定位到RAM或Flash其他地址:

SCB->VTOR = 0x08004000; // APP从偏移0x4000开始

Bootloader跳转APP前必须重设VTOR,否则APP的中断向量仍指向Bootloader区。

这个故事的启示,main不是CPU执行的第一个函数。栈顶地址和复位向量,在main之前就已经被硬件加载。启动文件写错,main永远跑不起来。写在最后,调试“上电没反应”,最先检查中断向量表:查看0x08000000:第一个字是不是RAM地址?第二个字是不是Reset_Handler地址?

这两个地址对了,单片机才有可能“活”过来。


(本文灵感源于于振南《新概念ARM32单片机》教程第5.5节“ARM32启动流程与中断控制器配置”。)觉得有用?点赞、转发,让更多人看懂启动文件和向量表的底层逻辑。

http://www.jsqmd.com/news/1177680/

相关文章:

  • 【ChatGPT FAQ自动生成实战指南】:20年NLP专家亲授5大核心算法与3类企业落地陷阱
  • 方案能不能进入下一阶段,先看这 6 类证据
  • 揭秘Goo Engine:Blender二次元渲染的革命性定制版本
  • 电脑上有没有好用的音频格式转换器?盘点10款好用的音频转换工具
  • SpringBoot 整合 MyBatis-Plus 代码生成器——告别手写重复代码
  • 3个秘密武器:如何用ViGEmBus解锁Windows游戏控制器的无限可能
  • 浮动 vs Flex:CSS 布局的演进
  • 2026年7月最新长沙萧邦官方售后客服中心地址电话及服务网点分布 - 萧邦中国官方服务中心
  • 星网宇达:公司与近期市场关注的长征十号乙运载火箭海上回收技术突破不存在业务关联
  • 前端音频播放器组件选型:5款Vue组件库功能与API深度评测
  • 【2027最新】基于SpringBoot+Vue的+线上教育培训办公系统管理系统源码+MyBatis+MySQL
  • 利用 Blazor 与 Native AOT 提升客户端应用的离线体验
  • 影刀RPA 向量数据库与RAG实战:打造企业知识库自动问答
  • 从零掌握AI Agent开发:Hello-Agents开源教程完整指南
  • C++内存池原理与实现:从性能瓶颈到高频场景优化实践
  • Windows安卓开发环境一键配置实战:ADB Fastboot驱动安装解密
  • 企业微信会话存档 SDK 消息拉取实战:3 种拉取模式与 1000 条/次性能调优
  • 降 AIGC 工具处理完还要自己改吗?怎么配合才最省心
  • Yelp数据EDA实战:从爬虫到业务洞察的系统性分析方法
  • 全网超全网络安全核心知识点汇总|零基础速成/期末备考/面试必看
  • 大狼狗在线JSON格式化:一款极致安全的纯前端JSON/BSON工具箱
  • 影刀RPA 商品评论采集与分析:挖掘用户真实反馈
  • CSV文件读写实战:编码、分隔符与类型安全全解析
  • AI绘画提示词编写指南:20组实战模板与优化技巧
  • Codeforces Round 1102 (Div. 2)
  • WinCC 趋势图性能优化:单画面承载10+曲线与1秒刷新率的配置要点
  • 恶意代码攻防实战:利用Python模拟5种常见攻击技术(进程注入、端口复用等)
  • Logistic/Henon/Lorenz 3种混沌映射 MATLAB 仿真:从分岔图到 Lyapunov 指数计算
  • CTF 音频隐写实战:Audacity 与 MP3Stego 1.1.17 工具链的 5 步排查流程
  • 循环工程:从提示工程到AI自主进化的技术跃迁