- 试图切入ARM状态造成的用法Fault
问题:1.可能是内存泄漏 程序中有野指针,导致堆栈破坏;
个人工程中 排查发现为数组拷贝溢出数组大小,野指针导致堆栈破坏。
相应报错可能有:
1.RT_ASSERT 断言死机
2.rt_object_get_type((rt_object_t)thread) == RT_Object_Class_Thread) has assert failed at
都是内存泄漏,导致其他变量被改写。导致错误。
3.使用memchec命令 打印Memory block wrong:
怀疑到内存管理算法问题,改变内存管理算法。报错会不一样哦。 - sr: 0x00000000
r00: 0x20001268
r01: 0x10000000
r02: 0xf0000000
r03: 0x00000000
r04: 0x0801a130
r05: 0x0801a130
r06: 0x00000000
r07: 0x0000008c
r08: 0x00000000
r09: 0x00000000
r10: 0x00000000
r11: 0x00000000
r12: 0x00000000
lr: 0x080120f7
pc: 0x20000170
hard fault on handler
usage fault:
SCB_CFSR_UFSR:0x02 INVSTATE
其实就是试图切入ARM状态造成的用法Fault。但是CM组件无效,系统初始化失败。这种问题个人排查为:线程堆栈不足导致。可以对相应文件选择不优化与最小优化编译后看看能不能用。