【ARM Cortex-M 系列 2.2 -- Cortex-M7 单步调试原理及实现详细介绍】

news2024/11/25 18:44:36


请阅读【嵌入式开发学习必备专栏】


文章目录

    • 单步调试概述
      • 单步执行原理
      • Debug stepping control using the DHCSR

紧接上篇文章 【ARM Cortex-M 系列 2.1 – Cortex-M7 Debug system registers】

单步调试概述

在ARMv7-M架构中,通过使用单步调试(Halting Debug Stepping),调试器能够从调试状态退出,执行单条指令,然后重新进入调试状态。这是一种在精确调试软件时十分有用的功能,它允许开发者逐条检查指令的执行情况。单步调试是在以下所有条件满足时激活的:

单步执行原理

  1. DHCSR.C_DEBUGEN 被设置为1,使能 debug state。
  2. DHCSR.C_STEP 被设置为1,使能单步调试。
  3. 处理器处于非调试状态。

当处理器退出调试状态并且单步调试变为活动状态时,处理器将按照如下方式执行一个单步调试:

  1. 执行以下操作之一:
    • 执行下一条指令,不生成任何异常。
    • 接受任何待处理的足够优先级的异常入口。
    • 执行下一条指令,生成一个同步异常,并接受该异常。
  2. DFSR.HALTED 位设置为1。
  3. 返回到调试状态。

调试器还可以选择性地将 DHCSR.C_MASKINTS 位设置为1,以防止PendSV、SysTick和外部可配置中断被接受。当 DHCSR.C_MASKINTS 被设置为1时,如果允许的异常变为活动状态,处理器将会在执行关联的异常处理程序的第一条指令之前停滞并进入单步调试。

此外,DHCSR.{C_HALT, C_STEP, C_MASKINTS} 可以通过对 DHCSR 的单次写入来设置。这意味着,通过一个操作即可同时配置多个调试相关的控制位,从而为调试提供更大的灵活性和控制力。

在看了上述描述外,好像还是不清楚单步调试时怎么进行的?

简单来说可以按照下面步骤进行:

  • 调试器设置 DHCSR.C_DEBUGENC_HALT 位来暂停内核。 读取 DHCSR.S_HALT 判断是否处于debug state。

  • C_STEP 位设置为 1来使能单步执行,然后将 C_HALT 位设置为 0 内核离开 debug state,内核可以单步执行, 然后再进入停止状态。具体可以从下表可以看到当 C_HALT 为 0, C_STEP 为 1 的时候就是这种情况。

Debug stepping control using the DHCSR

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

采用java+B/S开发的全套医院绩效考核系统源码springboot+mybaits 医院绩效考核系统优势

采用java开发的全套医院绩效考核系统源码springbootmybaits 医院绩效考核系统优势 医院绩效管理系统解决方案紧扣新医改形势下医院绩效管理的要求,以“工作量为基础的考核方案”为核心思想,结合患者满意度、服务质量、技术难度、工作效率、医德医风等管…

电脑快速搜索文件及文件夹软件——Everything

一、前言 Everything是一款由voidtools开发的文件搜索工具,主要运行于Windows操作系统上。它的主要功能是快速、高效地搜索电脑上的文件和文件夹名称。Everything通过利用NTFS文件系统的MFT(主文件表)来索引文件,从而实现几乎实时…

揭秘 HTTP 代理:增强在线活动的安全性和匿名性

HTTP 代理在保护您的在线隐私、增强安全性以及允许访问受限内容方面发挥着关键作用。了解 HTTP 代理的工作原理以及如何有效地利用它们可以让您掌控自己的在线状态和浏览体验。让我们深入研究 HTTP 代理的世界,探索它们的优势、应用程序以及最大化其效用的最佳实践。…

4.uniapp+vue3项目使用vuex

文章目录 1. uniappvue3项目使用vuex1.1. main.js引入store1.2. 创建store/index.js1.3. 项目中引用1.4. 开始解决实际问题1.5. vuex和storage的区别 1. uniappvue3项目使用vuex 这篇文章,既是使用的教程,也是用来解决一个实际问题:uView自定…

软件工程期末复习(5)

可行性研究 可行性研究的任务 可行性研究的目的: 用最小的代价,在尽可能短的时间内确定问题是否能够解决。 可行性研究的实质: 就是一次压缩、简化了的系统分析和设计的过程。 可行性研究的路线: 分析和澄清问题定义&#…

在word中创建宏来多级列表的编号不显示的bug

出现问题的示意图如下,可以看出标题前面1.1消失了 第一步:选择开发工具 第二步: 第三步:选择当前文件(创建宏后,方便查找) 第四步: 第五步:打卡VB 第七步&#xf…

汇昌联信:拼多多入驻条件是哪些?

在电商领域,拼多多以其独特的团购模式迅速崛起,吸引了众多商家的目光。想要在拼多多上开店,了解其入驻条件是必不可少的第一步。下面将详细解读拼多多的入驻条件,帮助有意加入的商家们做好准备。 一、企业资质要求 想要成功入驻拼…

人工智能中的概率魔法:解锁不确定性的智慧之钥

在人工智能(AI)的广阔天地中,概率论以其独特的魅力,成为了连接现实世界与智能决策的桥梁。从语音识别到图像识别,从自然语言处理到机器翻译,从智能推荐到自动驾驶,概率论知识在这些领域中发挥着…

SpringCloud 集成 RocketMQ 及配置解析

文章目录 前言一、SpringCloud 集成 RocketMQ1. pom 依赖2. yml 配置3. 操作实体4. 生产消息4.1. 自动发送消息4.2. 手动发送消息 5. 消费消息 二、配置解析1. spring.cloud.stream.function.definition 前言 定义 Spring Cloud Stream 是一个用来为微服务应用构建消息驱动能力…

文件流-二进制文件(中北大学-程序设计基础(2))

目录 题目 源码 结果示例 题目 建立两个二进制磁盘文件f1.dat,f2.dat,编程实现以下工作: (1)将20个整数(可在程序中初始化),分别存放到两个磁盘文件中,前10个放到f1.dat中&…

C++类和对象下——实现日期类

前言 在学习了类和对象的六大成员函数后,为了巩固我们学习的知识可以手写一个日期类来帮助我们理解类和对象,加深对于其的了解。 默认函数 构造函数 既然是写类和对象,我们首先就要定义一个类,然后根据实际需要来加入类的数据与函…

windows和Linux卸载移动磁盘

文章目录 Linux卸载磁盘target is busy.window卸载磁盘打开事件查看器 Linux卸载磁盘target is busy. #查看有哪些进程访问挂载点 lsof /media/lei/repository/#杀死进程 pkill node window卸载磁盘 #提示 #该设备正在使用中. 请关闭可能使用该设备的所有程序或窗口,然后重试…

【React】redux开发者工具redux-devtools-extension的安装和使用

前言 redux-devtools-extension: 是一个用于Redux的开发者工具扩展。适合用于需要调试和监控Redux应用的状态管理。特点是可以提供实时的状态查看、行动日志和错误检测等 安装 chrome安装redux-devtools-extension 项目中安装并引入redux-devtools-extension yarn add re…

强化学习——马尔可夫奖励过程的理解

目录 一、马尔可夫奖励过程1.回报2.价值函数 参考文献 一、马尔可夫奖励过程 在马尔可夫过程的基础上加入奖励函数 r r r 和折扣因子 γ \gamma γ&#xff0c;就可以得到马尔可夫奖励过程&#xff08;Markov reward process&#xff09;。一个马尔可夫奖励过程由 < S , …

C++语言的字符数组

存放字符数据的数组是字符数组&#xff0c;字符数组中的一个元素存放一个字符。字符数组具有数组的共同属性。 1. 声明一个字符数组 char c[5]; 2. 字符数组赋值方式 &#xff08;1&#xff09;为数组元素逐一赋值 c[0]H c[1]E c[2]L c[3]L c[4]O &#xff08;2&…

【JVM】从可达性分析,到JVM垃圾回收算法,再到垃圾收集器

《深入理解Java虚拟机》[1]中&#xff0c;有下面这么一段话&#xff1a; 在JVM的各个区域中&#xff0c;如虚拟机栈中&#xff0c;栈帧随着方法的进入和退出而有条不紊的执行者出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的&#xff08;尽管在…

【qt】数值的输入与输出

数值的输入与输出 一.与c中的输入与输出的区别二.QString转数值三.数值转QString1.number()2.asprintf() 四.小项目1.总价和进制2.QSpinBox代替3.QSlider滑动块4.QScrollBar滚动条5.QDial表盘6.QLcdnumber lcd显示 五.总结一下下 一.与c中的输入与输出的区别 在c中我们一般通过…

java项目之相亲网站的设计与实现源码(springboot+mysql+vue)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的相亲网站的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 相亲网站的设计与实…

泛微E9开发 添加多个多选框,实现单选框的效果

利用多个多选框实现单选框的效果 1、功能背景2、展示效果3、实现效果 1、功能背景 如下图所示&#xff0c;在表单中新增四个“选择框-复选框”类型的字段&#xff0c;并且设置其中的选项&#xff0c;每个多选框都只有一个选项&#xff0c;通过代码块实现单选框的效果 1.显示模…

网络工程师练习题

网络工程师练习题 下面的应用中,DHS基于UDP协议。在一台服务器上只开放25和110两个端口,这太服务器可以提供E-Mail服务。与HTTP相比,HTTPS协议将传输的内容进行加密,更加安全。HTTPS基于SSL安全协议,其默认端口是443。某单位网络拓扑如图所示。路由器AR2路由表内容如下所示…