程序是否处于 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);//触发断点
}
免责声明:本文系网络参考,内容版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。