簡體   English   中英

STM32 嘗試訪問 memory 時出現硬故障

[英]STM32 Hardfault when trying to access memory

我正在分析為 STM32H730 微控制器編寫的代碼。 我發現下面的代碼片段在調用 BootHoldRequest(&fnBoot) 時給出了硬故障。

#define BOOTBLOCK_ADD        0x08000000L
#define BootHoldRequest        (*((BOOTLOAD_PROCEED_TYPE *) (BOOTBLOCK_ADD + 0x200)))

typedef void (* CALLBACK_PTR)(void);
typedef uint16_t BOOTLOAD_PROCEED_TYPE(CALLBACK_PTR *);

typedef void (* VOID_FUN_TYPE)(void);
static VOID_FUN_TYPE fnBoot;

if (BootHoldRequest(&fnBoot)) //<--------- HARDFAULT
{
       
}

由於沒有看到整個項目(包括 linker 腳本等)無法回答您的問題,因此我將僅展示如何調試此問題。

  1. 這段代碼有什么作用?
if (BootHoldRequest(&fnBoot))

        ldr     r0, .L6
        ldr     r3, .L6+4
        bx      r3
.L6:
        .word   .LANCHOR0
        .word   0x8000200

它從BOOTBLOCK_ADD + 0x200位置加載 4 字節地址,然后接下來調用位於該地址的代碼。 我不知道您那里的數據是否正確,因此您需要自己檢查。

如果您使用 IDE(在我的示例中為 Atollic - 與 STM32Cube IDE 幾乎相同),您可以輕松檢查它。

兩種方法: 在這一行設置斷點。

  1. 使用表達式 window 查看此地址的內容: 在此處輸入圖像描述
  2. 進入指令調試模式在此處輸入圖像描述

並按照當時的代碼一匯編指令。 您將看到代碼是否完成了它應該做的事情。 在此處輸入圖像描述 這不是你的代碼。 這是我從事的項目中的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM