完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
项目使用STM32L431,rtthread版本4.1.0,开启ec200x网络,使用at组件进行网络通信,经常需要将ec200x模块关闭再打开,代码示意如下:
while(1){ ec200x_init(device); 初始化ec200,开启网络功能 //联网通信发送。(经过验证,网络传输这一块代码没有内存泄露) ec200x_deinit(device);关闭ec200,关闭ec200x //延时 cmd_free(int argc, char **argv); //执行行ps命令,打印内存使用情况 发现每次循环已使用内存会增加8字节,长期下去会造成内存不够 } 统计每次循环中打印free命令,内存的使用情况,可以看出每次循环一次增加8字节内存 used : 24412 used : 24420 used : 24428 used : 24436 used : 24444 used : 24452 used : 24460 used : 24468 used : 24476 used : 24484 used : 24492 used : 24500 used : 24508 used : 24516 used : 24524 used : 24532 used : 24540 used : 24548 used : 24556 used : 24564 used : 24572 used : 24580 used : 24588 used : 24596 used : 24604 used : 24612 经过反复验证内存泄露发生在每次ec200x_init和ec200x_deinit这个过程,即每次while循环,用 free命令查看内存使用,每次循环后使用内存固定会增加8字节。内存泄露没有发生在其他 地方,屏蔽掉ec200x_init(device)和ec200x_deinit(device)就没有出现内存逐渐增加的现象。联网发送数据也没有发现内存泄露,应该是ec200x_deinit(device)这个操作中没有释放掉相关资源造成下一次ec200x_init(device)中又重新分配了资源,不知道在代码中哪儿没有释放。 |
|
相关推荐
5个回答
|
|
问题出在:
at_obj_set_urc_table(device->client, urc_table, sizeof(urc_table) / sizeof(urc_table[0])); |
|
|
|
对的,每次增加urc_table都会加长列表
|
|
|
|
怎么解决呢,需要在哪儿释放掉吗,感觉不大好处理这儿。每次都股固定增加8字节。 没有提供一个ec200x_socket反初始化的函数,在关闭的时候反初始化一下释放掉资源,每次开机的时候正初始化 |
|
|
|
|
|
|
|
厉害厉害,解决了,内存不再泄露了。
total : 110240 used : 19720 maximum : 20864 free information total : 110240 used : 19720 maximum : 20864 free information total : 110240 used : 19720 maximum : 20864 free information total : 110240 used : 19720 maximum : 20864 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
753 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
2714 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1368 浏览 0 评论
1955 浏览 0 评论
1523 浏览 0 评论
75000 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 13:46 , Processed in 0.774524 second(s), Total 81, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号