【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.hqwc.cn/news/696668.html

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

相关文章

【软设】常见易错题汇总

目录 计算机系统基础 程序语言基础 数据结构 算法设计与分析 计算机网络与信息安全 软件工程基础 开发方法(结构化与面向对象) 数据库 操作系统 知识产权相关的法律法规 🤯🤯🤯🤯🤯&#x1f9…

UE4_照亮环境_不同雾效的动态切换

一、问题及思路: 我们在一个地图上,经常切换不同的区域,不同的区域可能需要不同的色调,例如暖色调的野外或者幽暗的山洞,这两种环境上,雾效的选用肯定不一样,夕阳西下的户外用的就是偏暖的色调&…

OS复习笔记ch5-4-2

引言 承接上文我们介绍了信号量机制和应用信号量机制实现的进程同步和互斥,这一节我们将围绕一些经典问题对信号量机制展开更深入地探讨。 读者/写者问题 读者/写者问题与我们之前遇到的问题类型不同,它描述的是: 有读者和写者两组进程&am…

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自定…

VS2022 错误 LNK2001 无法解析的外部符号

错误 LNK2001 无法解析的外部符号 “private: static struct std::once_flag ThreadPool::flag_” (?flag_ThreadPool0Uonce_flagstdA) STL D:\VS2019\STL\源.obj 1 错误原因 :链接器无法解析 ThreadPool::flag_ 这个静态成员变量。这通常是因为静态成员变量在声明…

ESP32 IDF linux下开发环境搭建

文章目录 介绍升级Python环境下载Python包配置编译环境及安装Python设置环境变量 ESPIDF环境搭建下载esp-idf 代码编译等待下载烧录成功查看串口打印 介绍 esp32 官方文档给的不是特别详细 参考多方资料 最后才完成开发 主要问题在于github下载的很慢本教程适用于ubuntu deban…

基于GD32的简易数字示波器(5)- 软件_控制LED

这期记录的是项目实战,做一个简易的数字示波器。 教程来源于嘉立创,帖子主要做学习记录,方便以后查看。 本期主要介绍GPIO口的输入输出模式,使用其中的输出模式驱动LED。详细教程可观看下方链接。 2.2 LED控制实验 语雀 1、LE…

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

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

Postman基础功能-断言与日志

若能脱颖而出,何必苦苦融入。大家好,在 API 测试的领域中,Postman 是一款极为强大且广泛使用的工具。其中,断言和日志调试功能扮演着至关重要的角色。 一、介绍 断言允许我们在测试过程中验证 API 的响应是否符合预期。通过设定各…

揭秘高效引流获客的艺术

在数字营销的海洋中,吸引潜在客户的注意力就像捕捉闪烁的鱼群——需要技巧、耐心和正确的工具。有效的引流获客策略能为企业带来生机,如同春风拂过荒漠,唤醒沉睡的种子。本文将带你领略那些让企业脱颖而出的获客秘籍,让你的目标客…

嫦娥六号揭秘真相:阿波罗登月是真是假?一文终结所有疑问!

近期,嫦娥六号的成功发射如同璀璨的星辰,再次将人们的视线聚焦于浩瀚的宇宙,与此同时,网络上关于美国阿波罗登月是否造假的争议也如潮水般涌现。一些声音宣称,嫦娥六号的发射为揭示美国阿波罗登月任务的真实性提供了关…

ubuntu server 22.04.4 系统安装详细教程

本教程使用vmware workstation 17创建虚拟机进行安装演示,安装方式和真机安装没有区别。 1、下载镜像 下载ubuntu server版本系统镜像,官网下载地址:https://cn.ubuntu.com/download/server/step1 注意:自己下载时需要确认是否是…