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


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


文章目录

    • 单步调试概述
      • 单步执行原理
      • 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.mzph.cn/diannao/11675.shtml

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

相关文章

数据结构与算法学习笔记一---顺序表的静态存储表示和实现(C语言)

目录 1.顺序表的静态存储过程 1.初始化 2.销毁 3.清空 4.表长 5.获取数据元素 6.直接前驱 7.直接后继 8.插入 9.删除 10.遍历 11.测试代码 前言 这篇博客主要是顺序表的静态分配存储表示。 1.顺序表的静态存储过程 我们使用静态数据来存储顺序表中的数据元素&#…

粒子群算法(Particle Swarm Optimization)

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 算法背景 粒子群优化算法(Particle Swarm Optimization,PSO)的灵感来源于鸟群或鱼群的觅食行为。想象一下&a…

Shell脚本——批量清理Kubernetes集群中Evicted状态的pod

测试环境有一台宿主机出现了异常,大量的异常日志导致宿主机的磁盘使用率超过了85%,触发了上面的pod驱离策略,该宿主机上的的pod处于Evicted状态。在清理了磁盘之后,得手动处理掉这些Evicted状态的pod。 #!/bin/bash# 获取当前状态…

Teachable Machine:Google开发可在浏览器运行免编程机器学习工具

项目说明 Teachable Machine 是由 Google 开发的一款基于机器学习的在线工具,为用户提供了创建个性化机器学习模型的简便途径,无需深入专业领域或编程技能。 允许用户快速、简单地创建自己的机器学习模型,主要用于进行图像、声音和姿势等数据…

鸿蒙内核源码分析(内核态锁篇) | 如何实现快锁Futex(下)

本篇为快锁下篇,说清楚快锁在内核态的实现,解答以下问题,它们在上篇的末尾被提出来。 鸿蒙内核进程池默认上限是64个,除去两个内核进程外,剩下的都归属用户进程,理论上用户进程可以创建很多快锁&#xff0…

【Unity从零开始学习制作手机游戏】第01节:控制3D胶囊体运动

1. 新建Project L01 使用3D Mobile模板。 2. 建立一个平面,用来承载物体 3. 导入Unity库内的胶囊体 下载 StandardAssets https://download.unitychina.cn/download_unity/e80cc3114ac1/WindowsStandardAssetsInstaller/UnityStandardAssetsSetup-5.6.7f1.exe …

RobbitMQ基本消息队列的消息接收

1.先给工程引入依赖 父工程有了子工程就不用导了 <!--AMQP依赖&#xff0c;包含RabbitMQ--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> 2.配置yml…

未来相遇过去:博物馆藏品管理平台的科技革新之旅

引言&#xff1a; 尊重历史&#xff0c;意味着保护其实体的载体。在博物馆这个时间的容器中&#xff0c;每一件藏品都承载着人类文明的印记&#xff0c;它们是历史的低语&#xff0c;是过去对现在的细语。在这篇文章中&#xff0c;我将带您走进博物馆的幕后&#xff0c;探究藏品…

软件工程中的版本控制有何重要性?

版本控制在软件工程中具有非常重要的作用&#xff0c;它不仅能够帮助开发者管理代码的历史版本&#xff0c;还能够促进团队协作和降低开发风险。以下是版本控制的一些关键重要性&#xff0c;以及如何在使用LabVIEW进行项目开发中应用版本控制&#xff1a; 历史记录保持&#xf…

/proc/modules文件

/proc/modules文件中列出了内核加载的所有模块的信息&#xff0c;与使用lsmod命令类似。 第一列&#xff1a;模块名称 第二列&#xff1a;模块使用的内存大小&#xff0c;单位是bytes 第三列&#xff1a;模块被load的次数 第四列&#xff1a;是否有其他模块依赖此模块&#…

Windows:管理用户账户,密码策略和安全配置

在Windows操作系统中&#xff0c;管理用户账户和密码策略是确保系统安全的关键步骤。本文将探讨如何通过PowerShell和其他Windows工具管理用户账户&#xff0c;包括查看和设置密码策略、检查用户状态&#xff0c;以及导出和导入安全策略。这些管理任务对于系统管理员尤其重要&a…

电口和光口

在网络配置工作中&#xff0c;总会有人问什么是电口和光口&#xff0c;下面对其进行简单的区分。 1、电口 电口是服务器和网络中对RJ45等各种双绞线接口的统称&#xff0c;其原因是这些端口都使用电作为信息的承载介 质&#xff0c;不过有时它也会包含同轴电缆端口。 2、光口…

Spring框架核心:揭秘Java厨房的智能烹饪艺术

前情回顾&#xff1a;Spring框架深度解析&#xff1a;打造你的Java应用梦工厂 六. 实现控制反转 6.1 描述如何在Spring中实现IoC 在Spring Town的厨房里&#xff0c;实现控制反转就像是将食材的采购和准备过程外包给了一个智能系统。这个系统知道每种食材的特性&#xff0c;也…

C++|内存管理(2)

目录 malloc/free和new/delete的区别 共同点 不同点 内存泄漏 什么是内存泄漏 内存泄漏的危害 内存泄漏分类 堆内存泄漏 系统资源泄漏 malloc/free和new/delete的区别 共同点 都是从堆上申请空间&#xff0c;并且需要用户手动释放。 不同点 1. malloc和free是函数&a…

Php swoole和mqtt

在 PHP 中使用 Swoole 处理 MQTT 订阅消息是一种高效的方式&#xff0c;可以充分利用 Swoole 协程的非阻塞特性和高性能 I/O 处理能力。下面是一个示例代码&#xff0c;演示了如何使用 Swoole 的 MQTT 客户端来订阅消息&#xff0c;并加以详细说明。 1. 安装 Swoole 首先&…

Kubernetes——两万字超细致集群搭建平台规划

目录 前言——常见的K8S安装部署方式 一、Kubernetes平台规划 1.单Master集群架构 2.多Master集群架构 二、集群规划 1.服务器硬件配置推荐 2.操作系统初始化 2.1关闭防火墙 2.2关闭SElinux 2.3关闭Swap 2.4添加Hosts 2.5调整内核参数 2.5同步时间 三、集群搭建…

为什么有的人炫富会倒霉健康的关系是保持适当的距离

目录 为什么有的人炫富会倒霉 健康的关系是保持适当的距离 为什么有的人炫富会倒霉 有的人的八字结构就是先天的“危险体质”,俗称惹祸精,你靠近他,跟他产生关系,就会他被连累,尤其是近距离关系,比如丈夫,妻子,闺蜜这些人,当一个人八字中婚姻宫或者夫妻星不太好的时…

AtCoder Beginner Contest 353(A~E)

文章目录 A Buildings1.基本思路&#xff1a;2.代码&#xff1a; B - AtCoder Amusement Park1.基本思路&#xff1a;2.代码&#xff1a; C - Sigma Problem1.基本思路&#xff1a;2.代码&#xff1a; D - Another Sigma Problem1.基本思路&#xff1a;2.代码&#xff1a; E - …

QT ERROR: Unknown module(s) in QT: xlsx怎么办

现象描述 QT编译c代码的时候&#xff0c;报这种QT ERROR: Unknown module(s) in QT: xlsx&#xff0c;应该如何解决&#xff1f; 这里&#xff0c;我简单记录一下自己的解决问题过程。有可能&#xff0c;对遇到同样的问题的你&#xff0c;也有所帮助 第一步 检查perl是否安装…

浅析扩散模型与图像生成【应用篇】(二十四)——Text2Live

24. Text2LIVE : Text-Driven Layered Image and Video Editing 本文提出一种文本驱动的图像和视频编辑方法。与其他方法直接对图像进行编辑的方式不同&#xff0c;本文提出的方法并不是基于扩散模型的&#xff0c;更像是一个自编码器&#xff0c;通过对原图编码解码输出一个新…