我已经调试了好几个小时了。
我的应用程序是一个使用TI-RTOS在CC2650 ARM M3处理器上运行的嵌入式程序。
此c行生成ARM硬件故障异常(LD-链路寄存器设置为0xfffffd):
leaseStartMessageForReplay = *leaseStartMessage;
代码只需取消对
leaseStartMessage
结构指针的引用,并将完整的结构内容(两个字)复制到leaseStartMessageForReplay
结构。(至少这是内涵)。该行的实际程序集如下所示:
程序集似乎正确:第1行加载地址为
leaseStartMessage
的R0。第二行加载地址为leaseStartMessageForReplay
的R2。第三行将地址R0处的两个字加载到R0和R2中。第四行将R0和R2中的两个字存储在地址R1处。硬故障异常发生在第三条线路上。寄存器R0、R1、R2在执行第3条指令之前具有这些值:
可以看到,两个地址指针R0和R1已经初始化,我已经验证它们包含正确的地址。
任何关于如何调试的帮助都将非常感谢。
最佳答案
R0未与32位地址对齐,LMDIA需要对齐。
改为使用memcpy()。
关于c - 简单的结构解除引用触发ARM hard_fault硬件异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32744206/