【发布时间】:2022-01-21 23:11:28
【问题描述】:
我正在分析为 STM32H730 微控制器编写的代码。我发现下面的代码 sn-p 在调用 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
{
}
【问题讨论】:
-
您的设备内存映射是什么样的?您确定提供的地址是正确的吗?
-
@Someprogrammerdude 我已将 BOOTBLOCK_ADD 更改为 0x08000000L,这是根据参考手册的正确地址。仍然出现硬故障。
-
预期类型的函数是如何到达该地址的?
-
还有
BootHoldRequest(&fnBoot)有什么意义?它不是一个有效的类似函数的宏。您是如何进行此编译的? -
@Lundin
BootHoldRequest是一个宏,它将值(地址)转换为指向函数的指针,然后调用该函数。