简单的struct dereference触发ARM hard_fault硬件异常

时间:2015-09-23 15:55:01

标签: c assembly arm cortex-m3

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

这一行c生成一个ARM hard_fault异常(LD-link寄存器设置为0xFFFFFFFD):

leaseStartMessageForReplay = *leaseStartMessage;

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

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

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

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

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

非常感谢任何有关如何调试此方法的帮助。

1 个答案:

答案 0 :(得分:2)

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

改用memcpy()。