我已经调试了好几个小时了。我的应用程序是一个嵌入式程序,运行在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被初始化,我已经验证了它们包含正确的地址。
任何关于如何调试的帮助将不胜感激。
1条答案
按热度按时间oxiaedzo1#
R0未与32位地址对齐,LMDIA需要对齐。
使用memcpy()代替。