0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用APM32一种排查软件端问题的调试方法

Geehy极海半导体 来源:21ic论坛 作者:21ic论坛 2022-09-08 11:00 次阅读

问题背景

实际调试、或者产品开发阶段,有时候会碰到产品触发异常、报HardFault这类错误。

在这里介绍一种排查软件端问题的调试方法。

测试原理

简单来说,就是利用 “MCU触发HardFault异常、跳转到HardFault服务函数前,会把现场的内核寄存器值先压入堆栈空间保存好” 的这个特性。

所以我们可以:

· 确认触发HardFault后,使用的是PSP进程堆栈,还是MSP主堆栈(一般是MSP,也可理解用户在SRAM中划分出来的堆栈空间)

· 根据对应堆栈SP指针,挑出触发HardFault的PC指针所指向的位置。

· 注意现场保存、寄存器值入栈顺序:xPSR-》PC-》LR-》R12-》R3~R0

b5dfeb18-2f16-11ed-ba43-dac502259ad0.jpg

b5f0adae-2f16-11ed-ba43-dac502259ad0.jpg

b60eddf6-2f16-11ed-ba43-dac502259ad0.jpg

实测基于APM32F407demo板,新建会触发HardFault的例程——访问、改写溢出实际SRAM存储空间的数据。

b635432e-2f16-11ed-ba43-dac502259ad0.jpg

b6577ac0-2f16-11ed-ba43-dac502259ad0.jpg 仿真调试下,全速运行,成功触发Hardfault。

b66ae5e2-2f16-11ed-ba43-dac502259ad0.jpg

在0x2000_03E0堆栈位置,存储着进入HardFault前的内核寄存器信息,如图所示

·PC指向地址是0x08003AA——可找到对应触发HardFault的汇编代码

b6962e32-2f16-11ed-ba43-dac502259ad0.jpg

上述分析可以看到,在对0x2003_0002这个异常存储空间进行操作后,会影响往下代码指令的执行(特别是操作SRAM空间)从而触发HardFault

后话HardFault的触发还有很多因素,比如客户的MCU供电问题、某些VCAP脚没接上、硬件接地干扰、Flash等待周期不符合芯片规定等等。文章所介绍的方法只是针对软件部分的排查参考。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5355

    浏览量

    120533
  • 函数
    +关注

    关注

    3

    文章

    4333

    浏览量

    62700

原文标题:APM32芯得 EP.08 | APM32F407 HardFault排查——软件方案

文章出处:【微信号:geehysemi,微信公众号:Geehy极海半导体】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    怎么用Clion开发APM32

    APM32 官方 SDK 中提供了三开发环境:Keil、IAR 和 Eclipse。不否认这三环境的强大,但是在 AI 时代做嵌入式开发,用这三环境就显得有点不够优雅了。本篇文章
    的头像 发表于 12-17 09:19 892次阅读
    怎么用Clion开发<b class='flag-5'>APM32</b>

    射频放大器调试与故障排查

    、射频放大器的基本工作原理 在深入调试和故障排查之前,了解射频放大器的基本工作原理是必要的。射频放大器通常由输入匹配网络、放大器核心和输出匹配网络组成。输入匹配网络确保信号能够有效地从源传递到
    的头像 发表于 12-16 09:06 236次阅读

    一种简单高效配置FPGA的方法

    本文描述了一种简单高效配置FPGA的方法,该方法利用微处理器从串行外围接口(SPI)闪存配置FPGA设备。这种方法减少了硬件组件、板空间和成本。
    的头像 发表于 10-24 14:57 655次阅读
    <b class='flag-5'>一种</b>简单高效配置FPGA的<b class='flag-5'>方法</b>

    APM32F10xx进入低功耗模式的问题分析

    近日,在学习APM32开发板关于PMU模块的内容,看到很多内容都是调用WFI内核指令进入低功耗模式,于是自己想尝试调用WFE内核指令进入低功耗模式,但在APM32F10xx中,我运用按键中断,在中断
    的头像 发表于 10-18 16:13 311次阅读
    <b class='flag-5'>APM</b>32F10xx进入低功耗模式的问题分析

    一种利用wireshark对远程服务器/路由器网络抓包方法

    一种利用wireshark对远程服务器/路由器网络抓包方法
    的头像 发表于 09-21 08:03 3114次阅读
    <b class='flag-5'>一种</b>利用wireshark对远程服务器/路由器网络抓包<b class='flag-5'>方法</b>

    测试用例怎么写

    编写测试用例是确保软件系统从头到尾能够正常工作的关键步骤。以下是个详细的指南,介绍如何编写
    的头像 发表于 09-20 10:29 484次阅读

    一种无透镜成像的新方法

    使用OAM-HHG EUV光束对高度周期性结构进行成像的EUV聚光显微镜 为了研究微电子或光子元件中的纳米级图案,一种基于无透镜成像的新方法可以实现近乎完美的高分辨率显微镜。 层析成像是一种强大的无
    的头像 发表于 07-19 06:20 396次阅读
    <b class='flag-5'>一种</b>无透镜成像的新<b class='flag-5'>方法</b>

    rup是一种什么模型

    RUP(Rational Unified Process,统建模语言)是一种软件开发过程模型,它是一种迭代和增量的软件开发
    的头像 发表于 07-09 10:13 1297次阅读

    网络安全数字孪生:一种新颖的汽车软件解决方案

    汽车软件的数字孪生为整个汽车生命周期的汽车软件提供了一种新的方法软件孪生技术可以帮助整车厂和供应商优化和验证他们的设计,它还有助于改善现有
    的头像 发表于 04-22 17:19 847次阅读
    网络安全数字孪生:<b class='flag-5'>一种</b>新颖的汽车<b class='flag-5'>软件</b>解决方案

    APM32下载了APM专属的HEX例程后识别不了芯片怎么解决?

    之前焊了块,可以识别芯片,下载了APM专属的HEX例程后反而识别不了了,非常痛苦。ARM内核仍然存在,Keil里面也下载不了了……不是板子锁死的问题
    发表于 03-28 06:20

    一种端接触移动到另_行程距离传感器

    一种端接触移动到另_行程距离传感器,用于高压开关柜内(10kv~35kv),
    发表于 03-09 03:35

    火灾报警参考软件调试环境设置

    软件调试
    Piezoman压电侠
    发布于 :2024年01月18日 15:53:22

    介绍6常见的反调试方法

    一种防止逆向的方案。逆向人员如果遇到复杂的代码混淆,有时会使用调试器动态分析代码逻辑简化分析流程。例如恶意软件通常会被安全研究人员、反病毒厂商和其他安全专业人员分析和调试,以了解其行
    的头像 发表于 01-15 09:53 3954次阅读
    介绍6<b class='flag-5'>种</b>常见的反<b class='flag-5'>调试</b><b class='flag-5'>方法</b>

    SWD端口无法连接如何排查

    大家在调试GD32 MCU的时候是否也碰到过SWD调试端口无法连接的情况?SWD端口无法连接的原因有很多,有时候排查没有思路,可能会耽误大家的时间,下面小编为大家介绍常见的SWD无法连接的原因,供大家
    的头像 发表于 01-10 10:46 2198次阅读
    SWD端口无法连接如何<b class='flag-5'>排查</b>

    一种扩展Spring控制反转的绝妙方法

    类型等于JSON,我就用JSON解析器,那如果新加个类型的解析器,是不是调用的客户还要修改呢?这显然太耦合了,本文就介绍一种方法,服务定位模式Service Locator Pattern来解决,它帮助我们消除紧耦合实现及其
    的头像 发表于 01-10 09:41 474次阅读