简单的结构取消引用触发 ARM hard_fault 硬件异常

simple struct dereference trigger ARM hard_fault hardware exception

我已经调试了好几个小时了。 我的应用程序是使用 TI RTOS 的 CC2650 ARM M3 处理器上的嵌入式程序 运行。

这一行c产生ARMhard_fault异常(LD-link寄存器设置为0xFFFFFFFD):

leaseStartMessageForReplay = *leaseStartMessage;

代码只是取消引用 leaseStartMessage 结构指针并将完整的结构内容(2 个单词)复制到 leaseStartMessageForReplay 结构。 (至少是这个意思)。

该行的实际程序集如下所示:

程序集似乎是正确的:第一行用 leaseStartMessage 的地址加载 R0。第 2 行用 leaseStartMessageForReplay 的地址加载 R2。第 3 行将位于地址 R0 的两个字加载到 R0 和 R2。第 4 行将 R0 和 R2 中的两个字存储在地址-R1.

hard_fault 异常发生在第 3 行。就在执行第 3 条指令之前,寄存器 R0、R1、R2 具有这些值:

可以看出,两个地址指针 R0 和 R1 已初始化,我已验证它们包含正确的地址。

任何关于如何调试的帮助将不胜感激。

R0 未与 32 位地址对齐,LMDIA 需要对齐。

改用 memcpy()。