RT-Thread系统 hard fault on thread:erx故障分析

最近在跑RT-Thread操作系统,发现系统跑久了出现死机的情况:
这里写图片描述
初步分析可能造成的原因:
1.网络堆栈、buff分配小了;
2.否是内存越界,一般erx任务是比较简单的;
3.内存泄漏 ,线程申请不到空间;
4.使用memset memcpy 内存操作的时候覆盖额外内存;
5.线程堆栈开的是否太小。
可能的解决办法:
1.检查动态内存分配malloc;
2.检查数组,特别是取变量地址的使用;
3.查外设配置,使用没使能的外设也可能会造成hard fault;
最后根据lr异常寄存器的值定位到出现错误的函数里面(学会调试很重要),是任务调度函数调用时出错,线程切换时可能由于内存资源分配的原因造成死机,重新分配线程堆栈大小,就没有出现死机的情况了。为防止系统意外出现死机的情况,根据需要可以增加看门狗检测,检测到系统运行异常重新启动。

更多技术文章浏览请关注:

百家号:
https://author.baidu.com/home?context=%7B%22app_id%22%3A%221646108714303504%22%7D&wfr=bjh

头条号:
https://www.toutiao.com/c/user/8115738721/#mid=1646025109246987

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cortex-M0是一种ARM处理器的核心架构,用于嵌入式系统中。"hardfault"是指在程序运行时发生的硬错误或异常。当Cortex-M0处理器检测到硬错误时,会引发一个硬错误中断,即硬错误中断(HardFault)。 Cortex-M0的硬错误中断(hardfault)通常是由以下情况触发: 1. 无效的指令:当程序执行到一个非法或无效的指令时,会导致硬错误中断。 2. 内存访问错误:当程序试图访问不存在的内存地址、只读内存进行写操作或对只执行内存进行写操作时,会导致硬错误中断。 3. 栈溢出:当程序使用的堆栈空间超过其分配的大小,会导致硬错误中断。 4. 数学运算错误:当程序进行除零或无效的浮点数操作等数学运算时,会引发硬错误中断。 发生硬错误中断后,Cortex-M0处理器会中止当前正在执行的进程,并将程序控制权传递给硬错误中断处理程序(HardFault Handler)。硬错误中断处理程序可以用于处理硬错误的日志记录、调试等操作,并根据具体情况采取相应的纠正措施。 为了解决Cortex-M0硬错误中断问题,应该进行以下步骤: 1. 使用调试工具来定位并修复导致硬错误中断的问题,例如检查程序是否存在无效的指令或内存访问错误。 2. 检查堆栈空间的分配是否合理,确保不会发生栈溢出。 3. 避免发生数学运算错误,例如在进行除法运算前进行零值检查。 通过以上措施,可以有效解决Cortex-M0硬错误中断的问题,确保程序的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值