在前文中,我们已经详细阐述了合宙基于移芯平台的模块遭遇死机问题的根源探寻策略与解决路径的构建。
今天,我们将进一步深耕细作,聚焦内存死机这一具体现象,探讨其背后的原因以及相应的解决策略。
本文档适用于合宙Air780E、Air780EP、Air780EQ、Air201
关联文档和使用工具:
移芯平台模块出现死机问题分析
trace32工具下载
EPAT抓取底层日志
一、从Ramdump里分析内存泄漏问题
对于遇到内存不足死机的问题,可以从ramdump里找出哪些函数在消耗ram。
进入trace32后,在自动弹出下发图片的窗口里能找到哪个函数在哪个task里用了多少ram没有归还,如果遇到哪个API大量申请了ram没有归还,基本上就是问题点了

为了查找方便,在trace_node选择某个数据,框里面右键 -> 点击format


上图里看到0x00868909 这个API在消耗大量的ram,从map文件,或者从trace_32工具菜单 view -> symbols -> browes 里搜索,Ctrl+F,或者Cov - > list functions,就能找到函数名称。

这样查找问题解答方向上 就相对明确了。
二、从Ramdump里分析栈溢出
需要检查下trace32里有没有freertos文件夹,如果没有可以在这里下载放到根目录freertos
一般来说,栈溢出会有断言的情况,但是也有代码申请了一大块栈空间,导致栈底的ram没有被改变,但是实际上代码已经操作了栈外空间,且freertos不会报错,燃石在trace32里能分析出来。
打开trace32 -> freertos -> stack Coverage -> List Stacks

可以看到ram使用情况,注意这里认为栈空间只有1KB,但是实际上可能是远超的,不过没关系,如果max里是0%,说明还有很多栈空间,不用去管

Tmr Svc这个task居然用到了93%

右键点击红框,在弹出菜单里选择display memory->dump

距离溢出只有不到70字节,如果用户代码里有类似uint8_t temp[71],那么很容易就操作了栈外的ram,死机就很正常了
详细资料获取请点击: www.openluat.com


审核编辑 黄宇
-
内存
+关注
关注
9文章
3234浏览量
76503 -
死机
+关注
关注
0文章
17浏览量
8805
发布评论请先 登录
MAX6604:DDR内存模块高精度温度监测的理想之选
德州仪器PTHxx060Y模块:DDR/QDR内存总线终端的理想之选
德州仪器PTH系列DDR/QDR内存总线端接模块解析
猛!合宙MCU模组:Air1601/1602双星出击!
高效接入语音交互:合宙模组音频方案如何选?
PLC无线通讯模块的风险与应对
采用合科泰分立器件的工业PLC电源模块防护方案
SEMPER™ Nano S25FS256T 内存模块快速上手与特性解析
硬件问题造成的MCU死机的原因
人脸识别身份核验终端卡顿死机怎么办?看这篇就够了
当rt_mq_recv()指定超时时间时,多个线程用这个函数时,会发生死机现象,怎么解决?
IGBT 芯片平整度差,引发键合线与芯片连接部位应力集中,键合失效
光模块安装使用异常全解析:从现象到解决方案的完整指南
如何应对步进电机的各种干拢问题
如何应对合宙模块的内存死机现象?
评论