STM32 调试--软件断点和debug模式判断

程序是否处于 debug 模式判断

在调试器连接上板子时,会判断为debug 模式,想要切换为正常模式,需要拔除调试器,并且重新给板子上电跑代码。

    if(*((uint32_t*)0xE000EDF0) & 0x00000001)
    {
    }

其中 0xE000EDF0 为Core debug 的 DHCSR 寄存器的地址
该寄存器描述如下:
在这里插入图片描述
32位的调试停止控制和状态寄存器
这提供了关于启用核心调试的处理器状态的状态信息
停止并步进处理器

寄存器(DHCSR)的描述可以在STM32 的参考手册中查看:
链接: STM32F1系列的参考手册.

寄存器(DHCSR)的具体地址在内核手册(技术参考手册)中可以查的到:
在这里插入图片描述
链接: Cortex-M3技术参考手册.
其他芯片的寄存器地址请参考对应的内核手册。

软件断点

软件断点是指在软件运行过程中,遇到软件断点就会停止运行(正常模式也会停止,需要注意不要使其在正常模式生效,可以判断是否处于调试模式在生效软件断点),这个功能一般用在“在线调试”下,当然,在线调试也可以手动打断点。
软件断点的优点是在调试的过程不需要手动打断点,同时触发时会自动停止,这样可以通过stack窗口快速查看是从哪里进入的,快速定位问题。

软件断点函数:

__breakpoint(value)

在“cmsis_armcc.h”这个头文件中就有关于这个函数的描述

/**
  \brief   Breakpoint
  \details Causes the processor to enter Debug state.
           Debug tools can use this to investigate system state when the instruction at a particular address is reached.
  \param [in]    value  is ignored by the processor.
                 If required, a debugger can use it to store additional information about the breakpoint.
 */
#define __BKPT(value)                       __breakpoint(value)

软件断点融入代码的方式

 if(*((uint32_t*)0xE000EDF0) & 0x00000001)//判断是否处于在线调试模式
 {
     __breakpoint(0);//触发断点
 }

免责声明:本文系网络参考,内容版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值