简单的结构取消引用触发 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()。
我已经调试了好几个小时了。 我的应用程序是使用 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()。