C语言 简单结构解引用触发ARM硬故障硬件异常

5cg8jx4n  于 2023-08-03  发布在  其他
关注(0)|答案(1)|浏览(81)

我已经调试了好几个小时了。我的应用程序是一个嵌入式程序,运行在CC 2650 ARM M3处理器上,使用TI的实时操作系统。
c的这一行生成ARM hard_fault异常(LD -链路寄存器设置为0xFFFFFFFD):

leaseStartMessageForReplay = *leaseStartMessage;

字符集
代码只是取消引用leaseStartMessage结构体指针,并将完整的结构体内容(2个字)复制到leaseStartMessageForReplay结构体。(至少这是一个意图)。
该行的实际装配如下所示:x1c 0d1x的数据
组件似乎正确:第1行用地址leaseStartMessage加载R 0。第2行将leaseStartMessageForReplay的地址加载到R2。第3行将位于地址-R 0的两个字加载到R 0和R2中。第4行在地址R1处存储R 0和R2中的两个字。
hard_fault异常发生在第3行。寄存器R 0、R1、R2在执行第3条指令之前具有以下值:


可以看出,两个地址指针R 0和R1被初始化,我已经验证了它们包含正确的地址。
任何关于如何调试的帮助将不胜感激。

oxiaedzo

oxiaedzo1#

R0未与32位地址对齐,LMDIA需要对齐。
使用memcpy()代替。

相关问题