Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Hardfault
5
RT_Thread运行2个小时左右必死机
发布于 2021-10-11 14:25:52 浏览:1366
订阅该版
各位大佬好,我的程序是基于阿波罗STM32F429的BSP开发的。现在每运行2个小时左右就会死机,打印出来的消息如下: ``` runThread Rpsr: 0x40000000 r00: 0x200082c0 r01: 0x00000000 r02: 0x00000000 r03: 0x00000000 r04: 0x00000000 r05: 0x00000000 r06: 0x00000064 r07: 0x00000000 r08: 0x00000003 r09: 0x00000000 r10: 0xdeadbeef r11: 0xdeadbeef r12: 0x20009508 lr: 0x0801d9ad pc: 0x20009508 hard fault on thread: cantxmo thread pri status sp stack size max used left tick error -------- --- ------- ---------- ---------- ------ ---------- --- louimb 15 ready 0x000004ac 0x00000c00 38% 0x00000002 -02 runTd 23 ready 0x0000014c 0x00000c00 17% 0x00000002 000 alarmTd 22 suspend 0x000000e4 0x00000400 33% 0x00000002 000 taskTd 21 ready 0x00000104 0x00000200 69% 0x00000001 -02 thTxTd 3 suspend 0x00000100 0x00000400 25% 0x00000005 000 thTd 2 suspend 0x00000088 0x00000400 13% 0x00000001 000 uiTxTd 16 ready 0x00000100 0x00000400 28% 0x00000003 -02 uiTd 17 ready 0x00000088 0x00000400 15% 0x00000003 000 loTxTd 6 suspend 0x00000100 0x00000400 28% 0x00000002 000 loTd 7 suspend 0x00000088 0x00000400 15% 0x00000004 000 cantxmo 7 ready 0x0000009c 0x00000200 30% 0x00000002 000 canrxmo 6 suspend 0x00000094 0x00000200 28% 0x00000002 000 txCan2Td 10 suspend 0x00000094 0x00000200 46% 0x00000002 000 rxCan2Td 8 ready 0x00000094 0x00000200 38% 0x00000002 000 txCan1Td 10 ready 0x00000094 0x00000200 28% 0x00000002 -02 rxCan1Td 8 suspend 0x00000094 0x00000200 28% 0x00000002 000 thmbTx 13 suspend 0x0000018c 0x00000c00 12% 0x00000002 000 thmbRx 12 ready 0x0000018c 0x00000c00 14% 0x00000002 -02 addTimeT 20 suspend 0x0000007c 0x00000200 28% 0x00000001 000 adcTd 5 suspend 0x00000114 0x00000400 29% 0x00000003 000 toaoTd 5 suspend 0x00000104 0x00000400 58% 0x00000005 000 didoTd 4 suspend 0x0000007c 0x00000200 24% 0x00000001 000 eepTd 5 suspend 0x0000007c 0x00000400 35% 0x00000002 000 wdgTd 3 suspend 0x0000007c 0x00000200 24% 0x00000001 000 tshell 20 suspend 0x00000084 0x00000800 07% 0x0000000a 000 tidle 31 ready 0x00000048 0x00000400 11% 0x00000014 000 usage fault: SCB_CFSR_UFSR:0x02 INVSTATE ``` 于是我根据`lr: 0x0801d9ad`定位到发生`Hard_Fault`前的程序代码段。具体内容如下: ![1.png](https://oss-club.rt-thread.org/uploads/20211011/b74440a57cc32fd068484a94c5ac2491.png) 函数内的的内容如下: ![image.png](https://oss-club.rt-thread.org/uploads/20211011/6afae6c68f7eb888cd3bd68ba9901620.png.webp) 我确信的是传入的参数没有导致内存溢出,因为我加过对传入参数的检测,发生死机时,都没有触发。每次死机时都发生在同一个位置。找不出原因,于是我又把发生问题的语句直接改成函数名的形式(原来是函数指针指向这个被调用的函数),结果下次死机时不再停在原来的位置,而是顺着往下移了下,停在了下面的函数中。如下: ![image.png](https://oss-club.rt-thread.org/uploads/20211011/f17f2bd56acf59c49d5ec4dd47cbaa64.png.webp) 于是我把所有的都替换掉,结果程序又会死在其它线程中,也是函数指针调用的地方,于是我又改,结果程序还是会死。于是怀疑不是这个问题导致的。因为程序在跑的时候,有两个串口一直在走485通讯(我的设备是从设备)。我发现每次死机时,查看串口寄存器状态时,ORE溢出位都为1,如下: ![image.png](https://oss-club.rt-thread.org/uploads/20211011/aa0a9155bd29a15710ee24fd40cf17ab.png) 于是我在驱动程序中,增加了对ORE溢出的处理,如下: ![image.png](https://oss-club.rt-thread.org/uploads/20211011/bcf189755e59e11c7d413afc4089b017.png.webp) 改了有效果,程序不固定每2小时左右死机了,但过了7个多小时后,程序还是死机了,死机时根据打印的信息,程序停在了这里,如下: ![image.png](https://oss-club.rt-thread.org/uploads/20211011/44367c26849e9bbd478cb896bb1d50b4.png.webp) 下面不知道,该怎么定位问题了,因为我看这边的程序也没有问题。各位大佬帮忙看看,感谢
查看更多
6
个回答
默认排序
按发布时间排序
出出啊
2021-10-11
恃人不如自恃,人之为己者不如己之自为也
所有你看到的,定位的位置都不是根源位置。但是可以肯定的是有非法写,把内存中的某些值写乱了。导致程序运行逻辑混乱。 根据你的描述,程序中有固定的非法写行为,溢出的位置和值等等,猜测是固定的,导致每次都在确定的位置停止运行。 有试过去掉清理 TC 标志吗?把所有涉及到的清理 TC 的位置先注释掉。因为有人反映过清理这个标志会引起丢中断现象。
aozima
2021-10-11
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
你分析的思路是对的,虽然暂没太大收获。 电源稳定性,以及温度,强干扰等环境因素也可以纳入分析,如果有特殊情况的话!
LordYuan
2021-10-11
这家伙很懒,什么也没写!
好的 感谢
游走在01的海洋
2021-10-11
In the end, it's not the years in your life that count. It's the life in your years.
一、应该是哪里程序有内存非法操作;建议你可以将其他线程关闭,先确定是哪个线程,再在线程中确定是哪个位置出现了内存非法读取、写入;(提醒:如果是非法读的话,也有可能会导致内存出错)
403463275
2021-10-11
啥都不懂
这个具体真不知道提供以下思路可以参考: 1.串口的接收函数和处理函数用到了同一块存储,使用串口中断接收的时候,处理函数进行了存储的操作会出现死机现象。 2.有线程占用CPU的时间 超过了串口接收中断,造成串口接收数据没有处理,导致了串口一直中断死机。 3.电磁环境较恶劣的时候,在串口信号产生了很大毛刺,进而产生了很多无效中断。
cxhxy12345
2021-10-12
这家伙很懒,什么也没写!
看你的描述,你有没有将串口线程停掉实验下,如果没有问题,那基本是串口数据处理有内存泄漏的问题产生。如果你的串口有动态分配内存的操作要注意了,由于你出问题的时间比较长,可以看出泄漏的内存是比较小的,只有长时间才能出问题,如果可以,你可以开个固定缓冲替换动态分配试验下。 当然,楼上的说法也是要关注的,如果有外部对通讯的干扰,也会导致这个问题,所以要首先排除外部问题。
撰写答案
登录
注册新账号
关注者
0
被浏览
1.4k
关于作者
LordYuan
这家伙很懒,什么也没写!
提问
9
回答
5
被采纳
0
关注TA
发私信
相关问题
1
RTT1.0,STM32调试时会跑到HardFault【已解决】,出现新问题
2
新手请教关于hardfault怎么查
3
github最新版本库中stm32f0X分支,运行切换任务时候出现hardfault[已解决]
4
实现iap功能,bootloader使用了rtt操作系统,在跳转到app代码的时候提示出现hardfault的问题
5
ymodem在on_begin内发送can无法断开连接,而且RTT会报hardfault
6
挂载UFFS文件系统执行到退出_BuildTreeStepOne函数时hardfault异常
7
STM32F1+RTT串口接收中断进入hardfault
8
STM32F746NG随机进入hardfault(已解决)
9
[已解决]自已建了个STM32F103的MDK工程,初始化时总是进入HardFault,求教!
10
将 Cortex M3 的 hardfault 处理与 M4、M7、M0 保持一致?
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用RC522软件包驱动FM1722
2
常量数据类型和表达式陷阱分享
3
进行i2c驱动移植的经验总结
4
在VSCode中使用clang-format
5
我该如何使用这个微雪的WIFI400 WIFI-LPB-100在rtt里或者我该怎样为它开发驱动
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
289
次被采纳
张世争
809
个答案
175
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部