搜索
bottom↓
回复: 20

请教RTT+stm32f107+lwip下的webserver,多次刷新内存泄露的问题

[复制链接]

出0入0汤圆

发表于 2012-10-26 15:21:41 | 显示全部楼层 |阅读模式
硬件平台:STM32F107V7CT6 + DP83848I
直接用RT-Thread 1.1.0 RC 给的 STM32F107例程,FINSH用的是UART2口,网络MII接口不变
然后只添加了ST官网给的ETH固件库例子里的fs.c、fsdata.c、httpserver-netconn.c文件。并修改与操作系统有关的变量及函数:
void http_server_netconn_init()
{
   rt_err_t result = RT_EOK;
  
  /* initialize and create http server socket thread */
  result = rt_thread_init(&http_server_thread, "httpnet", http_server_thread_entry, RT_NULL,
                          &http_server_thread_stack[0], sizeof(http_server_thread_stack),
                          RT_HTTP_SERVER_THREAD_PRIORITY, 16);
  RT_ASSERT(result == RT_EOK);
  result = rt_thread_startup(&http_server_thread);
  RT_ASSERT(result == RT_EOK);
}
发现,多次刷新时候,系统占用的mem一直在增加,内存不够用的时候就挂掉了,PING也PING不通。用FINSH命令list_tcps()显示N多TIME_WAIT状态的tcp连接在系统里没有被删除。不知道怎么回事
具体网页截图、FIMSH截图如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-10-27 11:17:34 | 显示全部楼层
你是否把TCP连接数开得很大?TCP连接断开后并不是马上就关闭,会先进入TIME_WAIT状态。又或者你把RT_LWIP_USING_RT_MEM宏打开了,如果打开这个宏,需要对lwip 1.4.0版本加补丁,建议关闭这个宏。

出0入0汤圆

 楼主| 发表于 2012-11-3 11:51:05 | 显示全部楼层
ffxz 发表于 2012-10-27 11:17
你是否把TCP连接数开得很大?TCP连接断开后并不是马上就关闭,会先进入TIME_WAIT状态。又或者你把RT_LWIP_U ...

谢谢您的回复,我看了下,确实是把把RT_LWIP_USING_RT_MEM宏打开了了,而且是用的lwip1.4.0版本。关闭这个宏定义后,问题得到了解决。就是不知道这个宏定义的作用是什么,又是什么原因导致了内存的泄露?还有就是开启这个宏定义需要的补丁是哪个?RT-Thread 1.1.0 RC里面有么?

出0入33汤圆

发表于 2012-11-3 12:28:26 | 显示全部楼层
同问,需要打什么补丁

出0入0汤圆

发表于 2012-11-3 22:09:57 | 显示全部楼层
帮顶                    

出0入0汤圆

发表于 2012-12-10 15:23:28 | 显示全部楼层
同问,需要打什么补丁,要怎么个处理方法

出0入0汤圆

发表于 2012-12-10 16:57:53 | 显示全部楼层
我在直接使用RT-Thread 1.1.0 RC 给的 STM32F107工程(IAR)时遇到如下问题:
1. 编译通不过,缺少一个头文件(能够在目录中搜索到,因此这个问题能够解决);
2. LwIP 1.4.0不够稳定,比如在网线拔掉比较长时间后再插上,网络无法恢复(短时间拔插能够恢复)。而在RT Thread 1.0.3没有这个问题。

出0入0汤圆

发表于 2012-12-10 21:25:12 | 显示全部楼层
以后估计会把RT_LWIP_USING_RT_MEM宏去掉,不大想改lwIP的代码了,曾把补丁提到lwIP去,没有被接受。所以现在的考虑是尽量不修改,或者修改仅局限于移植上,这样有lwIP新版本时,合并容易些。

lwIP 1.4.0稳定性还行,快发布1.4.1了。发布测试稳定后,再加到1.1.x系列版本中吧。

出0入0汤圆

 楼主| 发表于 2013-1-2 10:56:14 | 显示全部楼层
本帖最后由 qinmeng 于 2013-1-2 10:58 编辑
ffxz 发表于 2012-12-10 21:25
以后估计会把RT_LWIP_USING_RT_MEM宏去掉,不大想改lwIP的代码了,曾把补丁提到lwIP去,没有被接受。所以现 ...


我现在已经在用lwip1.4.1版本了,暂时也没发现问题。只是现在有个问题,不知道是移植问题,还是兼容的问题,亦或者是设置问题。
当我向一个任意IP地址的任意端口(也即IP:Port不存在)发送UDP包的时候,netconn_send会返回错误类型,这到没什么。
但是当发送几次之后,就进入硬件错误。提示在RT-Thread/src/mem.c的第291行                               
/* and insert it between mem and mem->next */
mem->next = ptr2;
mem->used = 1;

这在uCOS中没出现过的
如果我向一个已知的IP地址已知端口(也即有IP:Port在接收UDP包)发送UDP包,netconn_send返回ERR_OK也能持续发送,不会进入硬件错误

我现在也已经下载到了RT-Thread的1.1.0正式版本

出0入0汤圆

发表于 2013-1-2 11:02:08 来自手机 | 显示全部楼层
请问楼主的硬件平台是自己做的pcb,还是买的成板?

出0入0汤圆

 楼主| 发表于 2013-1-2 11:05:04 | 显示全部楼层
mint 发表于 2013-1-2 11:02
请问楼主的硬件平台是自己做的pcb,还是买的成板?


自己做的PCB,并准备以后更多的使用RT-Thread

出0入0汤圆

发表于 2013-4-12 11:43:06 | 显示全部楼层
ffxz 发表于 2012-10-27 11:17
你是否把TCP连接数开得很大?TCP连接断开后并不是马上就关闭,会先进入TIME_WAIT状态。又或者你把RT_LWIP_U ...

请问没有操作系统时,用lwip做http服务器时,采用CGI和ssi实现动态网页刷新,,,多刷几次会进入硬件错误中断,将栈改大后可以延长一段时间或者将tcp_poll ( pcb, http_poll, 10);中的延迟时间改大也可以延长时间,请问这个大概是什么问题

出0入0汤圆

发表于 2013-4-23 06:16:37 | 显示全部楼层
    我是直接删掉TIME_WAIT队列的。这个队列基本上没什么用,多占内存。

出0入0汤圆

发表于 2014-3-18 17:09:48 | 显示全部楼层

出100入101汤圆

发表于 2014-5-4 17:26:46 | 显示全部楼层
本帖最后由 fengyunyu 于 2014-5-5 12:36 编辑
wuzhujian 发表于 2013-4-23 06:16
我是直接删掉TIME_WAIT队列的。这个队列基本上没什么用,多占内存。


直接删掉,mark!

出0入0汤圆

发表于 2014-6-13 19:44:16 | 显示全部楼层
zhangpisces 发表于 2013-4-12 11:43
请问没有操作系统时,用lwip做http服务器时,采用CGI和ssi实现动态网页刷新,,,多刷几次会进入硬件错误 ...

请问你的这个问题是怎么解决的啊,目前正在看你的那个代码,好象发现死机的问题

出0入0汤圆

发表于 2014-6-17 08:54:44 | 显示全部楼层
ersha4877 发表于 2014-6-13 19:44
请问你的这个问题是怎么解决的啊,目前正在看你的那个代码,好象发现死机的问题 ...

时间久了有点搞忘了,,,好像是LWIP处理函数中没事释放pcb的原因

出0入0汤圆

发表于 2014-6-17 17:37:53 | 显示全部楼层
谢谢了,这几天都在调试你的代码,没有死机问题,就不知道自己做的有死机,不过原来自己使用LPC1768,现在该用STM32 了

出0入0汤圆

发表于 2014-8-18 10:05:32 | 显示全部楼层
大家好,我用RTT1.20+LwIP1.4.1 ,已经可以成功刷出最简单的 HelloWorld网页,代码与
viewtopic.php?t=1687
完全一样。

但是出现了如帖子: http://www.amobbs.com/thread-5503358-1-1.html 一模一样的问题,多次刷新,内存出现泄露,但是按照帖子的解决方案:

1. 取消宏后,TCP线程根本无法启动, 创建tcp 线程失败t = thread_create后直接(ASSSRT(t != NULL))

2. 帖子中提到换用Lwip1.4.1就可以解决问题,但是我一开始就是一直使用1.4.1 。。

3. 可能由于我的硬件问题,调试时候单步执行几句后总是会掉掉,无法继续debug,很是郁闷。。

还有帖子中提到的 “Lwip补丁” 改了哪些内容呢?
请问大家有没有遇到类似的问题,求高手指点迷津!

出0入0汤圆

发表于 2014-10-29 22:28:42 | 显示全部楼层
不错,有用

出0入0汤圆

发表于 2016-6-13 09:34:13 | 显示全部楼层
MARK,RT_LWIP_USING_RT_MEM造成内存泄漏。感谢楼主!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 18:41

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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