Stm32 如何解决:无法插入所有硬件断点;您可能请求了太多的硬件断点/监视点

Stm32 如何解决:无法插入所有硬件断点;您可能请求了太多的硬件断点/监视点,stm32,breakpoints,keil,atmelstudio,stm32cubeide,Stm32,Breakpoints,Keil,Atmelstudio,Stm32cubeide,我使用的是STM32多维数据集IDE,经常会出现一个错误对话框,上面写着: failed to insert all hardware breakpoints; you may have requested too many hardware breakpoints/watchpoints 我知道我使用的ARM Cortex M0+只支持4个硬件断点,因此会出现错误,但这通常是不够的。如何解决这个问题,并设置4个以上的断点 注意:我以前使用过STM8(使用IAR EWB),这是一种更有限的M

我使用的是STM32多维数据集IDE,经常会出现一个错误对话框,上面写着:

failed to insert all hardware breakpoints; 
you may have requested too many hardware breakpoints/watchpoints
我知道我使用的ARM Cortex M0+只支持4个硬件断点,因此会出现错误,但这通常是不够的。如何解决这个问题,并设置4个以上的断点


注意:我以前使用过STM8(使用IAR EWB),这是一种更有限的MCU,但我可以使用我想要的任意多的断点。

除了硬件断点,软件断点还可以用来进入调试器。仅当代码放在RAM中时,调试器才支持此操作。这通常是不实际的

作为一个生活黑客,可以做的是使
breakpoint()
函数包含一个硬件断点。现在,无论在何处调用此函数,都会激活断点:

void\uuuuu属性(noinline))断点()
{

__asm(“NOP”);//除了硬件断点之外,软件断点还可以用来闯入调试器。只有当代码放在RAM中时,调试器才支持这一点。这通常是不实际的

作为一个生活黑客,可以做的是创建包含硬件断点的
breakpoint()
函数。现在,无论调用哪个函数,断点都会被激活:

void\uuuuu属性(noinline))断点()
{

__ARM调试外围设备的硬件断点数量有限

一些调试探针(例如SEGGER J-Link)可以通过插入bkpt指令来设置“软件”断点,并动态重新编程闪存。您可以使用
\uUBKPT()
内部命令来设置自己的软件断点

#ifdef DEBUG 
#define DEBUGBKPT()     __BKPT()
#else
#define DEBUGBKPT()
#endif

如果您使用stlink-V2,您可以将其转换为Segger,并通过使用此链接中的软件,从无限断点和更快的调试中获益:

ARM调试外围设备的硬件断点数量有限

一些调试探针(例如SEGGER J-Link)可以通过插入bkpt指令来设置“软件”断点,并动态重新编程闪存。您可以使用
\uUBKPT()
内部命令来设置自己的软件断点

#ifdef DEBUG 
#define DEBUGBKPT()     __BKPT()
#else
#define DEBUGBKPT()
#endif

如果您使用stlink-V2,您可以将其转换为Segger,并通过使用此链接中的软件受益于无限断点和更快的调试速度:

1。一些调试软件足够智能,例如SEGGER2。如果您有bkpt指令和
\uu bkpt()在C/C++程序中使用方便的内部代码。你的空洞函数有错误的原型4。当断点未被设置时,这个函数的使用会改变代码的时间(分支,流水线刷新,缓存内存失效)。1.有些调试软件足够智能,例如SEGGER2。如果您有bkpt指令和
\uuUbKPT(),我看不出使用这种不方便的“解决方法”有任何意义在C++或C++程序中使用方便的内部代码。你的空洞函数有错误的原型4。当断点未被设置时,这个函数的使用会改变代码的时间(分支,流水线刷新,缓存内存失效)。而且,我写的时候根本不需要。我测试了这个(在STM32 +GDB+ST链接上)但它不起作用。为什么SEGGER(硬件)会起作用?GDB是这里的猪,我很喜欢改进。@user103185 SEGGER有自己的gdbserver。它不仅是硬件,而且是软件。请参阅我修改的答案。@user103185我做(stm32编程)作为我白天的工作,多年来一直在使用Segger debugger Probe,并且在ARM uCs编程方面有着丰富的经验。接下来的问题是GDB是否有缺陷(Segger解决了这个问题),或者ST Link驱动程序是否有缺陷,并且应该进行修改。@user103185这不是一个缺陷,而是一个Segger特性我测试了这个(在STM32+GDB+ST Link上)但它不起作用。为什么SEGGER(硬件)会起作用?GDB是这里的猪,我很喜欢改进。@user103185 SEGGER有自己的gdbserver。它不仅是硬件,而且是软件。请参阅我修改的答案。@user103185我做(stm32编程)作为我白天的工作,多年来一直在使用Segger debugger Probe,并且在ARM uCs编程方面有着丰富的经验。接下来的问题是GDB是否有缺陷(Segger已经解决了它),或者ST Link驱动程序是否有缺陷,并且应该进行修改。@user103185这不是一个缺陷,而是一个Segger功能