RTT各种错误排查(个人方法)

本文探讨了试图切入ARM状态导致的UsageFault异常,问题可能源于内存泄漏、野指针、数组拷贝溢出以及线程堆栈不足。通过内存管理算法检查和调整,以及编译选项优化,可以定位并解决此类问题。SCB_CFSR_UFSR错误代码提示是非法状态指令。建议检查线程堆栈配置以避免此类故障。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 试图切入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:
    怀疑到内存管理算法问题,改变内存管理算法。报错会不一样哦。
  2. 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组件无效,系统初始化失败。这种问题个人排查为:线程堆栈不足导致。可以对相应文件选择不优化与最小优化编译后看看能不能用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值