簡體   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