我已经调试了好几个小时了。
我的应用程序是一个使用TI-RTOS在CC2650 ARM M3处理器上运行的嵌入式程序。
此c行生成ARM硬件故障异常(LD-链路寄存器设置为0xfffffd):

leaseStartMessageForReplay = *leaseStartMessage;

代码只需取消对leaseStartMessage结构指针的引用,并将完整的结构内容(两个字)复制到leaseStartMessageForReplay结构。(至少这是内涵)。
该行的实际程序集如下所示:
c - 简单的结构解除引用触发ARM hard_fault硬件异常-LMLPHP
程序集似乎正确:第1行加载地址为leaseStartMessage的R0。第二行加载地址为leaseStartMessageForReplay的R2。第三行将地址R0处的两个字加载到R0和R2中。第四行将R0和R2中的两个字存储在地址R1处。
硬故障异常发生在第三条线路上。寄存器R0、R1、R2在执行第3条指令之前具有这些值:
c - 简单的结构解除引用触发ARM hard_fault硬件异常-LMLPHP
可以看到,两个地址指针R0和R1已经初始化,我已经验证它们包含正确的地址。
任何关于如何调试的帮助都将非常感谢。

最佳答案

R0未与32位地址对齐,LMDIA需要对齐。
改为使用memcpy()。

关于c - 简单的结构解除引用触发ARM hard_fault硬件异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32744206/

10-11 22:09