完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
各位大佬好,我的程序是基于阿波罗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前的程序代码段。具体内容如下: 函数内的的内容如下: 我确信的是传入的参数没有导致内存溢出,因为我加过对传入参数的检测,发生死机时,都没有触发。每次死机时都发生在同一个位置。找不出原因,于是我又把发生问题的语句直接改成函数名的形式(原来是函数指针指向这个被调用的函数),结果下次死机时不再停在原来的位置,而是顺着往下移了下,停在了下面的函数中。如下: 于是我把所有的都替换掉,结果程序又会死在其它线程中,也是函数指针调用的地方,于是我又改,结果程序还是会死。于是怀疑不是这个问题导致的。因为程序在跑的时候,有两个串口一直在走485通讯(我的设备是从设备)。我发现每次死机时,查看串口寄存器状态时,ORE溢出位都为1,如下: 于是我在驱动程序中,增加了对ORE溢出的处理,如下: 改了有效果,程序不固定每2小时左右死机了,但过了7个多小时后,程序还是死机了,死机时根据打印的信息,程序停在了这里,如下: 下面不知道,该怎么定位问题了,因为我看这边的程序也没有问题。各位大佬帮忙看看,感谢 原作者:LordYuan |
|
相关推荐
15个回答
|
|
|
所有你看到的,定位的位置都不是根源位置。但是可以肯定的是有非法写,把内存中的某些值写乱了。导致程序运行逻辑混乱。
根据你的描述,程序中有固定的非法写行为,溢出的位置和值等等,猜测是固定的,导致每次都在确定的位置停止运行。 有试过去掉清理 TC 标志吗?把所有涉及到的清理 TC 的位置先注释掉。因为有人反映过清理这个标志会引起丢中断现象。 |
|
|
|
|
|
|
|
|
|
|
|
对,就是丢几次中断,丢数据了,对于 485 就变成校验失败,整个帧数据丢了
|
|
|
|
|
|
嗯嗯 谢谢 这样应该只会造成丢帧,也会造成死机吗?
|
|
|
|
|
|
死机的问题比较复杂,目前没有直接证据能把驱动部分的bug跟死机联系起来。但是,是有些情况下不正常运行的。
|
|
|
|
|
|
|
|
|
|
|
|
一、应该是哪里程序有内存非法操作;建议你可以将其他线程关闭,先确定是哪个线程,再在线程中确定是哪个位置出现了内存非法读取、写入;(提醒:如果是非法读的话,也有可能会导致内存出错)
|
|
|
|
|
|
谢谢 线程不是固定的
|
|
|
|
|
|
一、动态线程的话,那就要考虑在释放、创建线程最多的时候,内存空间是否足够了。仅供参考。
二、不过大概率还是内存在长时间的使用过程中,被非法操作了;具体是哪里就需要仔细排查了。 |
|
|
|
|
|
这个具体真不知道提供以下思路可以参考:
1.串口的接收函数和处理函数用到了同一块存储,使用串口中断接收的时候,处理函数进行了存储的操作会出现死机现象。 2.有线程占用CPU的时间 超过了串口接收中断,造成串口接收数据没有处理,导致了串口一直中断死机。 3.电磁环境较恶劣的时候,在串口信号产生了很大毛刺,进而产生了很多无效中断。 |
|
|
|
|
|
看你的描述,你有没有将串口线程停掉实验下,如果没有问题,那基本是串口数据处理有内存泄漏的问题产生。如果你的串口有动态分配内存的操作要注意了,由于你出问题的时间比较长,可以看出泄漏的内存是比较小的,只有长时间才能出问题,如果可以,你可以开个固定缓冲替换动态分配试验下。
当然,楼上的说法也是要关注的,如果有外部对通讯的干扰,也会导致这个问题,所以要首先排除外部问题。 |
|
|
|
|
|
好的 谢谢。没有使用动态内存分配。我串口接收数据使用的是固定数组构成的环形缓冲区接收数据的,串口接收线程我暂未屏蔽,等其它的都试好了,我再屏蔽线程试下。
|
|
|
|
|
|
环形缓冲要注意计数器回0时刻导致其他地方访问越界。
|
|
|
|
|
|
环形缓冲要注意读和写数据的平衡,如果你的写比读快,则要注意边界问题。所以原则上环形缓冲读的速度要>=写速度。
|
|
|
|
|
|
好的 谢谢
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1033 浏览 0 评论
2877 浏览 0 评论
图腾柱PFC无法上升至400V,且电感电流为正弦波形,但是幅值极小
9386 浏览 0 评论
飞凌嵌入式ElfBoard-Vim编辑器之静态链接和动态链接
2898 浏览 0 评论
使用 LinkBoy 将程序导出为 C 语言代码并烧录至 Arduino ESP32 开发板
2302 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 03:48 , Processed in 1.026042 second(s), Total 98, Slave 81 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2016