【发布时间】:2017-04-21 11:50:17
【问题描述】:
启动 STM32 我尝试为指针指向的结构分配内存。
TLxbEvents *LxbEvents
memset((void*)LxbEvents, 0, sizeof(TLxbEvents));
查看反汇编,它总是在线崩溃
STMCS r0!,{r2-r3,r12,lr}
我在 ARM 网站、谷歌或其他地方都找不到描述 STMCS 指令的文档... 那时的寄存器是
r0 0x2000D694
r2 0x00000000
r3 0x00000000
r12 0x00000000
lr 0x00000000
我试图将调用移动到另一个例程,没有任何更改,检查了对齐方式,这似乎也没问题。每次程序运行到该行时,它都会因 HardFault 而崩溃,并且根据一些调试变量,它是由看门狗重置引起的,我不相信...
这条线是做什么的,有人知道,是什么导致了硬故障?
【问题讨论】:
-
你有一个指针
LxbEvents,但它指向哪里? -
r0, 所以 0x2000D694 在 SRAM 中的某处,使用内存查看器我可以看到那里的所有内容都归零 -
使用前声明!
-
我的意思是,你确实让它真正point某处?您确实初始化变量,还是分配给它?否则,您要么取消引用空指针(如果变量是全局变量),要么它将具有不确定的值(如果它是局部变量)。在这两种情况下都会导致未定义的行为。
-
我做...但是,当我尝试做类似
LxbEvents = (TLxbEvents*)malloc(sizeof(TLxbEvents))的事情时,也会导致硬故障。我现在完全不知道为什么会发生这种情况