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

ARM Coretex-M核心单片机(STM32)找到hardfault的原因,与hardfault解决方法

1. 前提基础知识(ARM异常 压栈流程)M核栈增长是地址逐渐减小的
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

**M3h加粗样式

ARM CM4核心带浮点处理器FPU的,压栈的东西还不一样


进入hardfult后看MSP或者SP的值,看下边第二章图如果hardfult里边啥都没有,就只有个while(1){} 可以用第二张图判断SP+20里边存储的就是LR寄存器的值,也就是产生hardfault前导致的问题的地方,把这个值像第一张图一样写给PC就能定位到因为哪里产生的hardfault,

现在还在推出来个类似的公式解决方法,发现函数里边写的东西越多函数栈指针会变化,也就不能直接取*(SP+24)|(SP+23)|(SP+22)|*(SP+21),拼凑出来的值就是LR的值可以直接赋值给PC,定义个函数指针给赋值了,在调用在hardfault里边直接就可以跳过去

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

还在研究公式化的方法


http://www.kler.cn/a/562995.html

相关文章:

  • 算法题(79):两个数组的交集
  • seacmsv9注入管理员账号密码+order by+limit
  • MaxKB上架至阿里云轻量应用服务器镜像市场
  • 安科瑞为高速公路服务区充电桩建设运营提供解决方案
  • Canvas在视频应用中的技术解析
  • 国密算法Sm2工具类--golang实现版
  • SpringBoot项目连接Oracle视图报错整理
  • 上证50期权代码是什么?上证50股指期权数据从哪里可以找到?
  • 怎么获取免费的 GPU 资源完成大语言模型(LLM)实验
  • 在CentOS 7上安装RocketMQ 4.9.2
  • Vscode编辑器:解读文件结构、插件的导入导出、常用快捷键配置技巧及其常见问题的解决方案
  • 如何在Spring Boot中监控缓存的命中率?
  • 学习路之PHP --TP6异步执行功能 (无需安装任何框架)
  • HDFS扩缩容及数据迁移
  • 面试之《react hooks在源码中是怎么实现的?》
  • HIVE SQL函数之比较函数
  • Wpf 之Generic.xaml
  • vmware:新装ubuntu无法使用ssh连接或者复制粘连
  • Elasticsearch 相关面试题
  • Lua的for循环中ipairs和pairs的区别