我已经调试了好几个小时了。 我的应用程序是使用TI RTOS在CC2650 ARM M3处理器上运行的嵌入式程序。
这一行c生成一个ARM hard_fault异常(LD-link寄存器设置为0xFFFFFFFD):
leaseStartMessageForReplay = *leaseStartMessage;
代码只是取消引用leaseStartMessage
结构指针,并将完整的结构内容(2个单词)复制到leaseStartMessageForReplay
结构。 (至少是内涵)。
程序集似乎正确:第一行加载地址为leaseStartMessage
的R0。第二行加载R2,地址为leaseStartMessageForReplay
。第3行将位于地址-R0的两个字加载到R0和R2中。第4行将R0和R2中的两个字存储在地址R1中。
hard_fault异常发生在第3行。寄存器R0,R1,R2在执行第3条指令之前具有这些值:
可以看出,两个地址指针R0和R1已经初始化,我已经验证它们包含正确的地址。
非常感谢任何有关如何调试此方法的帮助。
答案 0 :(得分:2)
R0未与32位地址对齐,LMDIA需要对齐。
改用memcpy()。