找回密码
 立即注册

微信扫码登录

查看: 305|回复: 8

如何判断内存溢出?

[复制链接]

10

主题

18

回帖

134

积分

注册会员

积分
134
发表于 2024-10-29 23:19:56 | 显示全部楼层 |阅读模式
本帖最后由 haiou 于 2024-10-29 23:24 编辑

大家好,最近使用ZigBee  sdk 的时候遇到一个问题,困扰了许久,简单描述下:程序开始一切正常,如果不重启一切正常,但是如果重启,不论是手动重启还是通过BTD重启,程序就会卡在一个初始化的地方(通过打印log 知道),造成死机,看门狗也没起作用,没有起到复位作用,除非通过BTD active后reset,但是还是看到一直停留在之前的初始化,这个初始化我看了没啥问题,就是初始化gpio,操作一切正常,神奇的是去掉一些初始化后,就不会出现这种情况,比如有初始化模块A,B, C,D,E, 去掉其中一个模块一些模块就正常,单独去掉A模块也正常,单独去掉B模块也正常,单独去掉D模块也正常,用排除法无法排除问题,检查了代码未发现问题,我怀疑是内存泄露或者是溢出,但是我如何确认是否是这个问题或者说我如何定位问题呢,希望得到你们的帮助,非常感谢,期待你们的回答

27

主题

121

回帖

447

积分

版主

积分
447
发表于 2024-10-30 19:27:09 | 显示全部楼层
你好,
这样的描述太过宽泛了,无法给出针对性的建议。
你可以检查以下当前RAM和堆栈的使用情况。

10

主题

18

回帖

134

积分

注册会员

积分
134
 楼主| 发表于 2024-10-30 22:13:27 | 显示全部楼层
TL_YB 发表于 2024-10-30 19:27
你好,
这样的描述太过宽泛了,无法给出针对性的建议。
你可以检查以下当前RAM和堆栈的使用情况。 ...

你好,抱歉,遇到当前问题可能没能很好地描述,因为我对这个问题也比较模糊,我检查了程序的ram是足够的,flash也足够,程序中的ram如下所示:
.bss          00006050  008422f0  00034064  0004a2f0  2**4

ram截图

ram截图

我还尝试读取flash,虽然我看了ZigBee sdk开发手册,对大概flash布局有一定了解,但是我没法判断哪些是非法的操作,我将正常跑的固件,读取出未入网和入网的flash,异常的固件读取出对比,发现了一些不一样的地方,发现在0x340000、0x342000,0x7A0000、0x7A2000这些地方差异比较大,但是也没法定位是什么原因导致,因为sdk 说明8258的flash nv1 和nv2,都不在这些位置(我用写入的是NV_MODULE_APP块),下面是两个固件读取的flash,并分为入网前 入网后,希望你能提供点建议,谢谢
正常固件的flash,左边未入网,右边是已经入网:



正常的固件截图

正常的固件截图

异常固件

异常固件

27

主题

121

回帖

447

积分

版主

积分
447
发表于 2024-10-31 19:42:23 | 显示全部楼层


image.png

从上面能够看出这个flash位置在入网前是有数据的(看着像是const数据),入网后这块区域被用来存储网络参数了。
可以检查一下你的固件大小是不是已经超过固件最大要求了。

10

主题

18

回帖

134

积分

注册会员

积分
134
 楼主| 发表于 2024-11-1 14:22:53 | 显示全部楼层
本帖最后由 haiou 于 2024-11-1 14:30 编辑
TL_YB 发表于 2024-10-31 19:42
从上面能够看出这个flash位置在入网前是有数据的(看着像是const数据),入网后这块区域被用来存储网络 ...

你好,我检查了我的固件bin文件是210k,flash 512k,没有超出,不知道我理解得是不是指这个固件大小,我持续今天跟进,应该就是flash操作的问题我将读写地址和数据打印出来发现,入网的时候会读一个异常地址FE836F1A,之后就有问题了,但是重启的时候还会读FE836F1A这个地址,就是应用程序无法启动(应用的log没打印),如图所示
111.png

log.zip

2.34 KB, 下载次数: 0

27

主题

121

回帖

447

积分

版主

积分
447
发表于 2024-11-4 13:43:26 | 显示全部楼层
微信截图_20241104134247.png

固件要求小于208k

10

主题

18

回帖

134

积分

注册会员

积分
134
 楼主| 发表于 2024-11-4 15:42:04 | 显示全部楼层
本帖最后由 haiou 于 2024-11-4 15:53 编辑
TL_YB 发表于 2024-11-4 13:43
固件要求小于208k

好吧,非常感谢,我忽略了这里,如果这样子,感觉固件的空间太小了,demo的编译d的固件已经194k可拓展才14k,这个如何减少固件的大小,或者拓展固件的空间呢,看了nv的分配文件如果用bootload模式的话只有196k的固件空间,是否意味可以拓展呢

27

主题

121

回帖

447

积分

版主

积分
447
发表于 2024-11-4 16:06:23 | 显示全部楼层
512K版本如果bootloader模式的话就更不适合你现在的应用开发了。
你可以看看8258 1M Flash的版本。

10

主题

18

回帖

134

积分

注册会员

积分
134
 楼主| 发表于 2024-11-5 11:27:41 | 显示全部楼层
TL_YB 发表于 2024-11-4 16:06
512K版本如果bootloader模式的话就更不适合你现在的应用开发了。
你可以看看8258 1M Flash的版本。 ...

在节约成本情况下只能优化代码了,有什么好建议么
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Telink forum ( 沪ICP备17008231号-1 )

GMT+8, 2024-11-24 09:50 , Processed in 0.088718 second(s), 21 queries .

Powered by Telink 隐私政策

泰凌微电子版权所有 © 。保留所有权利。 2024

快速回复 返回顶部 返回列表