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

详细介绍:调用栈和fault analyzers(快速找到bug)

详细介绍:调用栈和fault analyzers(快速找到bug)

1.错误类型

一般来说 错误类型就是以下四种 而最常见的是:Hardfault

在 ARM Cortex-M 系列处理器(如 STM32 芯片)中,Hardfault是一种严重的系统故障异常,当处理器检测到无法被其他异常(如总线故障、用法故障)处理的错误时,会触发该异常。以下是关于 Hardfault 的关键信息:

一、触发原因

Hardfault 的触发场景非常广泛,典型原因包括:

  1. 内存访问错误
  1. 指令异常
  1. 硬件故障
  1. 中断配置错误

2. ARM Cortex-M 系列处理器寄存器

1.sp寄存器

  • SP_main(主堆栈指针,MSP):是默认的堆栈指针,用于异常服务例程(如中断、系统调用)、OS 内核以及应该特权访问的代码。系统复位后默认使用该堆栈。
  • SP_process(进程堆栈指针,PSP):用于线程模式下的普通应用程序代码(非异常场景)。在嵌入式操作系统中,不同任务可通过它维护独立堆栈,搭建任务隔离。(在freertos下会用到)

2.LR与PC寄存器

  1. R14(连接寄存器,LR)
  1. R15(程序计数器,PC)

3.异常发生后的处理

这张图展示的是 ARM Cortex-M 系列处理器中 ** 异常返回机制(EXC_RETURN)** 的关键参数,用于定义异常处理达成后处理器的返回行为,核心含义如下:

  1. 什么是EXC_RETURN

当处理器进入异常处理(如中断、HardFault 等)时,链接寄存器(LR)会被自动加载一个特殊值,这个值就是EXC_RETURN。它的作用是指示处理器在异常处理达成后,以何种模式、使用哪个堆栈返回原执行流程

  1. 各数值的效果解析
  2. 补充说明的逻辑

  • 当 “主程序在线程模式下用 MSP” 被中断时,异常服务例程的LR会被自动设为0xFFFF_FFF9(原 LR 已被压栈),确保返回后回到 “线程模式 + MSP” 的原流程。
  • 当 “主程序在线程模式下用 PSP” 被中断时,异常服务例程的LR会被自动设为0xFFFF_FFFD,确保返回后回到 “线程模式 + PSP” 的原流程。
  • MSP(主堆栈指针)在错误发生前指向的是当前活跃的主堆栈区域;当错误(如异常、Hardfault)发生时,处理器会自动将上下文寄存器(R0-R3、R12、LR、PC、xPSR 等)压入 MSP 指向的栈中,因此错误发生后,MSP 指向的是 “错误发生前的栈 + 刚压入的上下文数据” 的栈区域

简言之,EXC_RETURN是 Cortex-M 处理器异常返回的 “控制码”,通过不同数值编码,精准控制返回后的执行模式(线程 /handler)和堆栈选择(MSP/PSP),保障系统在异常处理后能正确恢复执行流程。

4.案例分析

在有错误的时候,我们看寄存器

看lr寄存器的值与上面的错误分析,去寻找msp(主栈堆)

  1. 找到msp对应的地址(此时已经压栈)

从左往右依次对应寄存器 找到LR对应的值

    可以通过 MSP(主堆栈指针)定位到发生错误的函数,核心依据是异常发生时处理器会自动将关键寄存器(包括错误发生时的指令地址)压入 MSP 指向的堆栈

    原理:异常时的堆栈自动压入机制

    当错误(如 HardFault、中断等异常)发生时,Cortex-M 处理器会触发 “硬件自动压栈”:将当前执行上下文的关键寄存器按固定顺序压入当前活跃的堆栈(如果此时使用 MSP,则压入 MSP 指向的主堆栈),压栈顺序为:R0 → R1 → R2 → R3 → R12 → LR(返回地址) → PC(错误发生时的指令地址) → xPSR(脚本状态寄存器)

    其中,错误发生时正在执行的指令地址就是PC(程序计数器)的值就,借助这个地址可能直接定位到对应的函数。

    .在本次案例中 大家不查看pc寄存器而是查看lr寄存器

    指示 “被中断函数的返回目标”,追溯函数调用链

    当程序正常运行时,LR的作用是保存 “当前函数执行完毕后要返回的下一条指令地址”(即调用者的地址)。例如:

    通过这个LR值,许可反向追溯:错误发生在哪个函数(B)中,而这个函数是被哪个函数(A)调用的,从而还原错误发生时的函数调用链(如 A→B→错误点)。

    补充

    再上面这里 20000008是pc最后的指向 而08000f6c是发生错误前正在指向的代码翻译成机器码后的储存位置

    具体详情看

    06 调用栈和fault analyzers

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

    相关文章:

  1. 蓝牙钥匙 第75次 蓝牙与V2X技能融合:构建智能网联汽车的神经脉络
  2. 2025年质量好的铸石板衬板厂家最新推荐排行榜
  3. 07_String对象
  4. 04_函数
  5. 06_数组与集合
  6. 05_对象
  7. 2025年12月江苏新沂U型槽品牌推荐前十强分析
  8. 2025年下半年北京NPDP培训机构综合评估与选择指南
  9. 2025年评价高的深睡凝胶枕/凝胶枕高评价厂家推荐榜
  10. 2025年北京NPDP培训中心实力对比
  11. 2025年靠谱的专业AB枕芯厂家推荐及选择指南
  12. 2025年12月江苏新沂U型槽品牌前十推荐与选择指南
  13. 2025年下半年江苏徐州电表箱品牌推荐前十指南
  14. 2025-12-08 GitHub 热点项目精选
  15. 2025年比较好的矿山边坡防护网/被动边坡防护网实力厂家TOP推荐榜
  16. 2025年12月徐州拓普互动品牌综合评估与优选推荐
  17. 2025年12月徐州拓普互动品牌综合评估与优选指南
  18. 2025年热门的双面法兰绒厂家推荐及选择参考
  19. 2025年下半年北京PMP项目管理培训十大优质机构推荐与选择指南
  20. 2025年下半年江苏新沂盖板品牌精选推荐前五指南
  21. 2025年12月山东临沂钻铣磨一体机品牌综合推荐与选购指南
  22. 01_初识JavaScript
  23. 苏州地区月嫂保姆护工服务公司2025年12月排行榜
  24. C#实现三菱MC通讯协议库(4C帧-格式1) - Dragonet
  25. Cisco Secure Firewall 1200 Series FTD Software 10.0.0 发布 - 思科下一代防火墙系统软件
  26. 2025年热门的水处理环保设备/专业环保设备高评价厂家推荐榜
  27. 2025年高压电缆品牌推荐榜及厂家联系方式
  28. 高压电缆公司排行2025年12月最新榜单
  29. 2025年评价高的医疗污水处理设备/地埋式污水处理设备厂家推荐及选购指南
  30. 2025年口碑好的风力选煤设备/新型多级风力选煤设备厂家最新热销排行