[英]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 腳本等)無法回答您的問題,因此我將僅展示如何調試此問題。
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 幾乎相同),您可以輕松檢查它。
兩種方法: 在這一行設置斷點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.