Cortex-M3如何跳出BusFault,跳过出错代码,程序往下执行

为了方便演示如何实现该方法,采用构造触发BusFault,方便分析

  1. 首先需要对系统Handler控制及状态寄存器SHCSR.MEMFAULTENA使能
    在这里插入图片描述

  2. 往SRAM reserved写入数据,触发BusFault

在这里插入图片描述

如上图所示,可以看到触发BusFault前BFSR寄存器第7为高,表示BFAR寄存器有效,且BFAR与MMAR寄存器一致,都为0xE000EDF8

在这里插入图片描述

此时,需要注意SP指针为0x2000A208,并且存储内容为0x2000A20C,这有助于找到触发BusFault,压栈前的SP指针

在这里插入图片描述

进入中断前PC指针为0x77B4,这个有利于分析压栈地址正确与否

在这里插入图片描述

  1. 进入中断,如下图所示:
    在这里插入图片描述

可以看到BFSR寄存器为14,为不精确的数据访问违例(violation,本来应该时精确的数据访问违例,不知道为啥后来变成这样了),LR寄存器赋值解释如下

在这里插入图片描述

并且SP指针为0x2000A1E8(这个很重要)。根据入栈顺序以及入栈后堆栈中的内容表可反推出旧的SP位置为新的SP+32

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

可以发现,通过新SP+32的方式找到的旧SP与原来的SP一致

在这里插入图片描述

此时,新的SP+24就可以得到压栈前PC指针

在这里插入图片描述

通过对比可以发现此时0x77B4就是进入BusFault前,PC指针

在这里插入图片描述

也就是说假如清除中断标志位后退出中断,或者说出栈后PC指针就是该值。但是BusFault清除中断后退出中断,PC指针指向为该地址,并不会自动+4。因此还是会再次进入BusFault。这里就解释了为什么MemMange Fault, Bus Fault, Usage Fault清除中断标记位后还是出不来的原因

因此,只需要在该地址上,给0x77B4+4,这样清除中断标记位后,就能使程序不再进入BusFault。

  1. 但是当程序往下运行时,可以程序又执行了一次压栈,SP指针由0x2000A1E8变成0x2000A1E0,SP指针减了8,故在采用SP指针修改PC指针的时候,一定要注意压栈的次数,SP改变次数,反推进入Handler时候的SP指针 我这里一共改变了12

在这里插入图片描述

  1. 对BFSR寄存器清空,也就是清除中断标记位 注:USFR BFSR MFSR合称 CFSR

在这里插入图片描述

在这里插入图片描述

  1. 获取当前SP值,并进入Handler时候的SP指针,其中 24表示压栈后PC偏移地址,+24表示找到压栈后的PC地址,4*6表示压栈前的PC指针(这里指针同地址),可以看到修改后的PC值为0x77B8。此时程序往下执行便不会再次触发BusFault,程序往下继续执行。

在这里插入图片描述

便不会再次触发BusFault,程序往下继续执行。
在这里插入图片描述

注意:采用修改PC值跳出BusFault,最好在进入BusFault后不在有程序跳转,防止PC值改变,另外程序也应该尽量简短,防止压栈出栈次数太多破坏各寄存器值。并且触发BusFault的整体函数也应该减少程序调用。总之,通过修改PC值,在代码中不是一种好的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/101230.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【高阶数据结构】红黑树 {概念及性质;红黑树的结构;红黑树的实现;红黑树插入操作详细解释;红黑树的验证}

红黑树 一、红黑树的概念 红黑树(Red Black Tree) 是一种自平衡二叉查找树,在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有…

框架分析(10)-SQLAlchemy

框架分析(10)-SQLAlchemy 专栏介绍SQLAlchemy特性分析ORM支持数据库适配器事务支持查询构建器数据库连接池事务管理器数据库迁移特性总结 优缺点优点强大的对象关系映射支持多种数据库灵活的查询语言自动管理数据库连接支持事务管理易于扩展和定制 缺点学…

OJ练习第164题——具有所有最深节点的最小子树

具有所有最深节点的最小子树 力扣链接:865. 具有所有最深节点的最小子树 力扣链接:1123. 最深叶节点的最近公共祖先 题目描述 给定一个根为 root 的二叉树,每个节点的深度是 该节点到根的最短距离 。 返回包含原始树中所有 最深节点 的…

机器学习笔记之最优化理论与方法(五)凸优化问题(上)

机器学习笔记之最优化理论与方法——凸优化问题[上] 引言凸优化问题的基本定义凸优化定义:示例 凸优化与非凸优化问题的区分局部最优解即全局最优解凸优化问题的最优性条件几种特殊凸问题的最优性条件无约束凸优化等式约束凸优化非负约束凸优化 引言 本节将介绍凸优…

芯片开发之难如何破解?龙智诚邀您前往DR IP-SoC China 2023 Day

2023年9月6日(周三),龙智即将亮相D&R IP-SoC China 2023 Day,呈现集成了Perforce与Atlassian产品的芯片开发解决方案,助力企业更好、更快地进行芯片开发。 龙智资深顾问、技术支持部门负责人李培将带来主题演讲—…

从零开始,无需公网IP,搭建本地电脑上的个人博客网站并发布到公网

文章目录 前言1. 安装套件软件2. 创建网页运行环境 指定网页输出的端口号3. 让WordPress在所需环境中安装并运行 生成网页4. “装修”个人网站5. 将位于本地电脑上的网页发布到公共互联网上 前言 在现代社会,网络已经成为我们生活离不开的必需品,而纷繁…

2023年9月CSPM-3国标项目管理中级认证报名,找弘博创新

CSPM-3中级项目管理专业人员评价,是中国标准化协会(全国项目管理标准化技术委员会秘书处),面向社会开展项目管理专业人员能力的等级证书。旨在构建多层次从业人员培养培训体系,建立健全人才职业能力评价和激励机制的要…

功率信号源可以应用在哪些方面

功率信号源是一种能够产生一定功率的信号源,广泛应用于各个领域。下面将介绍功率信号源在电子、通信、工业和科研等方面的应用。 在电子行业中,功率信号源是一种重要的测试工具。它可以产生各种波形的信号,如正弦波、方波、脉冲波等&#xff…

无涯教程-JavaScript - HEX2BIN函数

描述 HEX2BIN函数将十六进制数转换为二进制数。 语法 HEX2BIN (number, [places])争论 Argument描述Required/Optionalnumber 您要转换的十六进制数。 数字不能超过10个字符(40位)。数字的最高有效位是符号位(从右数第40位)。其余的39位是幅度位。 负数使用二进制补码表示。…

索尼 toio™应用创意开发征文|一步两步三步模拟浇花系统

目录 1.toio™介绍 2、创意分析 2.1 创意设计 2.2 创意落地 3、创意实现 3.1 环境安装 3.2 核心玩法 总结 1.toio™介绍 索尼的toio™是一款启发创意的机器人产品,旨在通过与真实世界的互动,为各年龄段的用户提供娱乐体验。这款产品具有高度的灵…

数学建模-大模型的对比

引用老哥数学建模视频 【ChatGPT 4.0】在数学建模中的应用!算法Matlab写作,全面测评六款大模型软件,直接使用! 哪些问题可以问GPT 一、算法应用 1帮我总结一下数学建模有哪些预测类算法? 2灰色预测模型级比检验是什么…

OpenCV基础(一):图片加载,图片腐蚀,图片模糊,图片边缘检测,图片保存

前言 在Android音视频开发中,网上知识点过于零碎,自学起来难度非常大,不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》,结合我自己的工作学习经历,我准备写一个音视频系列blog。本文是音视频系…