推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

固件上电跑飞先查启动代码

更新时间:2026-10-25 09:57:23 大小:38K 上传用户:江岚查看TA发布的资源 标签:固件启动启动代码程序跑飞中断向量表栈初始化 下载积分:2分 评价赚积分 (如何评价?) 打赏 收藏 评论(0) 举报

资料介绍

固件上电后程序跑飞,先查启动代码这几处 一、程序跑飞的现象 固件上电后,程序没有按预期运行,出现"跑飞"(执行了不该执行的代码、跳到了错误地址、死机、反复重启)。很多人遇到这种情况,一头扎进应用代码里排查,但很多时候问题出在"启动代码"(Startup Code)——MCU上电后最先执行的初始化代码。 启动代码出问题,程序根本走不到应用的主函数,自然跑飞。排查跑飞,先看启动代码。 二、启动代码里容易出问题的地方 2.1 中断向量表 ARM Cortex-M上电后,从向量表(Flash起始地址)读取两个关键值:初始栈指针(SP)和复位处理函数地址(Reset Handler)。如果向量表错(地址错、内容错),程序一开始就跳错地方。 排查:确认向量表在正确的地址(Flash起始)、SP和Reset Handler地址正确。 2.2 栈初始化 启动代码要初始化栈(设置栈指针)。如果栈没设好(栈指针指向无效区域、栈太小),程序一调用函数就栈溢出,跑飞。 排查:确认栈指针设置正确、栈大小足够、栈区在有效的RAM区域。 2.3 时钟初始化 启动代码(或早期初始化)要配置系统时钟。如果时钟没配好(晶振没起振、PLL没锁定、时钟源选错),系统时钟异常,程序运行不稳定。 排查:确认晶振起振、PLL锁定、时钟配置正确。 2.4 变量初始化 启动代码要初始化全局变量(把初值从Flash拷到RAM)、清零BSS段。如果这个初始化没做对(拷贝源/目标地址错、没清零),全局变量初值不对,程序逻辑就错。 排查:确认data段拷贝、bss段清零正确执行。 2.5 外设早期初始化 启动代码(或main之前的初始化)如果初始化了外设(比如时钟、引脚),配置错可能让后续程序异常。 三、怎么排查跑飞 3.1 用调试器看跑飞在哪 连上调试器,单步或看程序指针(PC)跑到哪里去了。

部分文件列表

文件名 大小
固件上电跑飞先查启动代码.docx 38K

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单

推荐下载