繁体   English   中英

Eclipse/GDB:硬件复位后如何设置自动断点?

[英]Eclipse/GDB: How to set an automatic breakpoint after hardware reset?

我正在使用带有 Eclipse 和 GDB 的自建嵌入式 IDE - 几乎本网站描述的内容: https : //gnu-mcu-eclipse.github.io/

当我使用 OpenOCD 或任何其他调试配置(如 SEGGER JLink)来刷新我的 STM32F407 硬件时,它在我的 main.c 的第一行中断。 没什么不寻常的。

// ----- main() ---------------------------------------------------------------
int main(void)
{

    //Initialization, if unsuccessful -> quit
    if (!INIT_bInit())
        return 0;

    //infinite Loop
    while (0x1337)
    {
        //Nothing
    }

    //Must not end here
    return 0;
}

//main() 

这可能是由于 Eclipse OpenOCD 调试控制台中的行为设置所致。

但是,我也希望有一个自动断点机制,它会在出现问题时停止程序

  • 硬故障或
  • 硬件复位

由于我的软件通常基于带有 void 函数指针的自动任务,我想知道何时由于要调用的函数出现问题而发生硬故障,

但到目前为止,我唯一注意到 HardFault 的时间是我在一段时间后暂停我的程序并检查它是否以我的(自定义)Default_FaultHandler(它实现了 HardFault_Handler 和其他)结束。

void Default_FaultHandler(void)
{
  while(0xDEAD){} 
}

硬件复位也是一样。 没有迹象,甚至没有在 main.c 上自动(重新)中断。

我从 NXP 的 MCUXpresso 或 Atollic Studio 等基于 Eclipse 的 IDE 中了解到,当调用任何故障处理程序或硬件重置时,可以自动中断程序。

关于如何使用我自己构建的 OpenOCD/Eclipse 解决方案自动化调试行为的任何想法?

热烈欢迎您的帮助

干杯

-亨尼

要分析您的硬故障,您可以编写一个更复杂的处理程序,参见https://www.freertos.org/Debugging-Hard-Faults-On-Cortex-M-Microcontrollers.html

prvGetRegistersFromStack()的实现如下所示。 prvGetRegistersFromStack()将寄存器值从堆栈复制到 C 变量中,然后进入循环。 命名变量以指示它们保存的寄存器值。 其他寄存器自故障发生后不会发生变化,可以直接在调试器的 CPU 寄存器窗口中查看。

另请参阅如何调试 STM32 设备中的意外复位?

您无法检测到硬件重置,因为它们会擦除整个内存。 再次启动时,您可以找到导致硬件复位的原因,这是在STM32中如何获得上次复位状态 可能将结果存储在一些永久存储器上,在下次硬件复位期间不会被擦除

如果你想在 suspiciuus 函数或处理程序中放置断点,只需使用

__BKPT();

或者如果您不使用 ARM CMSIS

#define __BKPT(value)                       __ASM volatile ("bkpt "#value)

例子:

void Default_FaultHandler(void)
{
  __BKPT();
  while();
}

当这个内在函数被击中时,您的调试器将控制:)

我发现由于 NYE 假期我还没有正式解决我的问题 :)

感谢ralf htp,我能够解决由 GDB 控制台选项导致的预加载断点的初始问题。

总结整个事情:发布的最后一个链接解决了 OpenOCD 版本。 https://electronics.stackexchange.com/questions/28593/hardware-breakpoints-on-the-stm32

对于 SEGGER j-link,它是

break main
break Default_FaultHandler

两者都可以在 Eclipse 调试配置(在启动选项卡中)中为 GDB 添加,如下所示

GDB 启动设置

奇迹般有效...

谢谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM