[英]simple struct dereference trigger ARM hard_fault hardware exception
我已经调试了很多小时了。 我的应用程序是使用TI RTOS在CC2650 ARM M3处理器上运行的嵌入式程序。
这行c会生成ARM hard_fault异常(LD-链接寄存器设置为0xFFFFFFFD):
leaseStartMessageForReplay = *leaseStartMessage;
该代码仅取消引用leaseStartMessage
结构指针,并将完整的结构内容(2个字)复制到leaseStartMessageForReplay
结构。 (至少这就是意图)。
程序集似乎是正确的:第一行将leaseStartMessage
的地址加载到R0。 第二行使用leaseStartMessageForReplay
的地址加载R2。 第三行将位于地址R0的两个字加载到R0和R2中。 第四行将两个字存储在地址R1的R0和R2中。
hard_fault异常发生在第三行。 在执行第三条指令之前,寄存器R0,R1,R2具有这些值:
可以看出,两个地址指针R0和R1已初始化,并且我已验证它们包含正确的地址。
任何有关如何调试的帮助将不胜感激。
R0没有与32位地址对齐,因此LMDIA需要对齐。
使用memcpy()代替。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.