cortex-m3软件断点/单步执行的实现机制

news/2025/2/15 17:14:58/

一.软件断点
软件断点设置后,断点处的代码如果是存放在SRAM中,相应的一条指令(C语言中的一行代码可能对应多条处理器指令)会被调试器(debugger)替换成cortex-m3的BKPT指令,当程序运行到这一BKPT指令时,处理器会被停机(halt),用户可以用调试器做出相应的操作。用户在操作完成继续执行指令时,原来C语言中的那一条指令会被调试器重新写入到该地址,并且取消停机,处理器从这一指令开始继续执行程序。

当然,以上操作需要断点处的指令所在地址是SRAM等可写的存储器,如果是ROM等不可写存储器,就只能使用CM3处理器通过FBU提供的硬件断点功能(在检测到程序执行到某一地址时,由处理器硬件自动停机),但是硬件断点最多只有8个,而软件断点的个数没有限制。

二.单步执行
典型情况是,要执行单步执行,处理器已经在debugger的控制下停机,这时处理器处于调试模式(debug state)。用户通过软件执行单步执行时,实际上debugger会通过DAP向 处理器中DHCSR寄存器的C_STEP写1,使处理器退出调试模式并执行以下三步操作:
1.根据中断状态执行以下操作中的一种:
1)没有将要进入的中断,则直接执行一条指令
2)有被挂起的中断,且该中断的优先级允许它被执行,则会进入该中断对应的服务函数
3)执行下一条指令,并由此产生了一次中断
注意:2)和3)都会导致一次中断压栈操作
2.将 DFSR.HALTED设置为1
3.回到调试模式

另外,如果DHCSR.C_DEBUGEN为0,则debug事件并不能使处理器被停机,而是进入debug monitor中断,在该中断中也可以执行单步操作(当然也可以通过读取存储器或外设等进行调试),基本原理和停机时的单步执行类似,可以参考ARMv7-M Architecture Reference Manual的C1-696页。

参考资料:
1.The Definitive Guide to Arm Cortex-M3 and Cortex-M4 Processors
2.ARMv7-M Architecture Reference Manual
3.https://zhuanlan.zhihu.com/p/34003929
 


http://www.ppmy.cn/news/97833.html

相关文章

从0到1接入钉钉消息通知

前段时间给项目接入监控告警,消息通知渠道选了钉钉。预算的原因内部办公刚从飞书转回钉钉,飞书消息通知之前就有一套了,测试钉钉从应用授权到消息测试花了不少时间。这里记录下从钉钉开放平台权限申请到消息接收全流程,给后面有同…

【Android工具】免费好用无广告安卓手机解压缩软件工具:ZArchiver

微信关注公众号 “DLGG创客DIY” 设为“星标”,重磅干货,第一时间送达。 前言 压缩工具在日常工作和生活中很常用,不光可以减小文件大小,还可以将多个文件进行打包,方便管理。 当然还有一些其他的特殊功能,…

解决省份问题

Provincial problem 问题 给定一个二维数组 vector<vector<int>> arr,arr[i][j] 1表示 i 省和 j 省相连&#xff0c;0 则不相连&#xff0c;求省份个数(相连的省叫做省份) 数据 vector<int> ufs 用于模拟并查集 思路 相连则合并&#xff0c;最终统计 …

【Dubbo核心 详解五】Dubbo 服务治理详解

引言 当前&#xff0c;分布式服务在互联网行业中得到了广泛应用。然而&#xff0c;分布式服务不仅仅是将单个应用程序分割成不同的模块&#xff0c;还涉及到模块之间的相互合作和协作。 服务治理是分布式服务的一个关键问题&#xff0c;因为它可以帮助开发人员管理不同的服务…

2023软件设计师上午题答案

1 cpu 主存 外设 2 物理物理地址 ❌ 3 4 4 中断程序入口 5 与真值对应❌ 6 2003 7 表示层 8 会话 公钥❌ 9 不信任 10 阻止网络攻击❌ 11 流氓软件❌ 12 署名 13 版权 14 继承所有权利 ❌ 15 加工要具体说明 16 集中化 17 E 18 23 19 28条 20 a为true 21 1不能连续 22 39&#…

Midjourney AI绘画咒语与生成的作品(实例)

据说Midjourney出来后&#xff0c;有一大批设计师抱着电脑&#xff0c;哭晕了~~ 有兴趣的朋友&#xff0c;可以看一下我前两天发的&#xff0c;地址如下&#xff1a; Midjourney AI绘画中文教程详解&#xff08;完整版&#xff09;模型、命令、参数与各种高级用法https://blog…

8.3:加强堆的应用

8.3&#xff1a;加强堆的应用 题目要求&#xff1a; 做一个加强堆的题目&#xff0c;给定一个整型数组&#xff0c;int[] arr&#xff1b;和一个布尔类型数组&#xff0c;boolean[] op 两个数组一定等长&#xff0c;假设长度为N&#xff0c;arr[i]表示客户编号&#xff0c;op…

C++ [STL之list的使用]

本文已收录至《C语言和高级数据结构》专栏&#xff01; 作者&#xff1a;ARMCSKGT 前言 vector是一片连续的空间&#xff0c;在数据访问上性能较好&#xff0c;但是任意位置插入删除性能较低&#xff0c;头插头删性能亦是如此&#xff1b;此时在这种需要频繁插入的场景下&…