搜索
bottom↓
回复: 87

看来LWIP还是不能用来做产品,贴个帖子

[复制链接]

出0入0汤圆

发表于 2010-12-31 21:01:06 | 显示全部楼层 |阅读模式
以下内容转自周立功网站:

标题:EasyARM8962 LWip+ucos 遇到TCP连接的问题,请指导!!急
1楼 icepnt 发表于:2009-12-31 12:51:00
在成都zlg买了easyARM8962的开发套件,我使用ucos+lwIP来实现tcp的数据收发,遇到的问题一大堆,不过之前的问题都解决的差不多了,现在遇到几个大问题,如下:

  

      1.PC作服务端,8962做客户端,假如,服务端先不开启,而这时候客户端运行(这种情况非常普遍,作为监控端的设备会一直上电,而pc端会经常关机)经过一段时间以后,再开启服务器,这时候客户端的tcp任务早于进入一个死循环(也就是faultISR),跟踪的结果是,在调用netconn_connect()这个函数的时候,如果不成功,既不会一直阻塞进程,也不会返回任何的错误,而是直接进入一个死循环,现在的问题是,如何才能让我能控制客户端能一直处于连接请求状态,不要进入死循环,返回错误也行啊,  

  

      2. 同样问题,假如在建立好连接后,正常的收发数据,这时候断开服务器的连接,这时候的客户端能检测到错误,但是在重新连接的时候有时候根本连接不上,而一旦连接失败,结果都是和上面一样进入一个死循环,

      3.连接正常的情况下,如果拔掉网线,8962不能检测到断线,如何解决?

  

  

      以上问题集中在断线重新连接,如果不成功会进入死循环(faultISR) 请指导如何解决这个问题,我希望能实现调用netconn_connect()的时候要么就一直阻塞直到成功建立连接,要么就一段时间后返回错误代码,我能进行处理,最好是返回错误!

  

麻烦广州的zlg的技术支持能尽快帮我解决这个问题,我们这个项目就卡在这里了,成都的技术支持对LWip也不太熟悉,服务还是很好的,没办法,我只有论坛求助了,
2楼 zlg_lzy 发表于:2009-12-31 15:39:00
icepnt,您好!

    你这个问题我们仔细分析了一下,应该是LwIP协议栈自身的缺陷,所以暂时还不能给你一个很明确的解决方法,我们的工程师正在处理这个问题,看看能不能改动一下LwIP弥补这个缺陷,一旦有结果我们将第一时间回复你。

[此贴子已经被作者于2010-1-2 20:01:07编辑过]3楼 icepnt 发表于:2010-1-4 10:47:00
能留下个联系方式么?我一直卡在这里,项目很急的,本来元旦就该验收了,希望你们能尽快帮助我解决上述问题,你们广州zlg的技术支持一定能轻易解决这个问题的
4楼 zlg_lzy 发表于:2010-1-4 15:01:00
icepnt,你好!

    你可以联系020-28267818,找任工,他会给你解决的。
5楼 icepnt 发表于:2010-1-6 12:30:00
希望尽快给我解答这个问题吧,客户都在催着去安装了,现在卡在这里,其他的调试都还没进行下去!!

  

另外再次说明下情况,上述第二种情况,服务器端开后,8962能检测到断线,之后再次重新连接,往往连接不上,这时候调用netconn_connect()后有三种情况出现:

  

1.进入faultISR 死循环,不知何故

2.进入OS_TaskIdle 死循环,还是没有从netconn_connect()返回

3.服务端能监测到8962发起的连接并显示连接成功,不过端口并不是8962重新连接的时候指定的那个端口,而是随机的端口,经常是跳到4097端口,重点是,这时候的客户端其实并没有连接成功,也就是还是没从netconn_connect()返回!!
6楼 zlg_lzy 发表于:2010-1-6 13:44:00
icepnt,您好!

    这个问题现在正在测试中,一旦通过会及时联系您的。
7楼 lm3 发表于:2010-1-7 10:32:00
问题已经修正,请联系销售!
8楼 zhangfeng 发表于:2010-6-9 22:42:00
我现在正遇见这个问题,请周立功或者楼上的大侠能否给我发份代码参考一下,谢谢,我邮箱cqmky@163.com QQ:93434606

 

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2010-12-31 21:02:00 | 显示全部楼层
有没有一个简单稳定的TCPIP协议栈?

出0入0汤圆

发表于 2010-12-31 21:16:49 | 显示全部楼层
我们这边的应用包括
telnet sntp ping ftpd tftp goahead vpn ssl rpc nfs....
事实证明lwip还是挺可靠的

出0入0汤圆

 楼主| 发表于 2010-12-31 21:20:43 | 显示全部楼层
回复【2楼】wyoujtg
我们这边的应用包括
telnet sntp ping ftpd tftp goahead vpn ssl rpc nfs....
事实证明lwip还是挺可靠的
-----------------------------------------------------------------------

你用的什么版本?自己做过修改么?用的什么操作系统?能说一下么!

出0入0汤圆

 楼主| 发表于 2010-12-31 21:21:40 | 显示全部楼层
回复【2楼】wyoujtg
我们这边的应用包括
telnet sntp ping ftpd tftp goahead vpn ssl rpc nfs....
事实证明lwip还是挺可靠的
-----------------------------------------------------------------------

你用的什么版本?自己做过修改么?用的什么操作系统?能说一下么!

出0入0汤圆

 楼主| 发表于 2010-12-31 21:25:45 | 显示全部楼层
从周立功网站的帖子看,ZLG应该是通过修改LWIP内核来解决提问者的问题的。

出0入0汤圆

 楼主| 发表于 2010-12-31 21:47:06 | 显示全部楼层
回复【2楼】wyoujtg
我们这边的应用包括
telnet sntp ping ftpd tftp goahead vpn ssl rpc nfs....
事实证明lwip还是挺可靠的
-----------------------------------------------------------------------

LS是不是做机顶盒?有修改过LWIP的内核么?

出0入0汤圆

 楼主| 发表于 2010-12-31 22:37:18 | 显示全部楼层
哪位高手解说一下顶楼提到的问题?

出0入0汤圆

 楼主| 发表于 2010-12-31 22:57:38 | 显示全部楼层
看来是一个网上提到最多的“lwip tcp client重连问题”

出0入0汤圆

 楼主| 发表于 2010-12-31 23:32:46 | 显示全部楼层
转自网络:

nios+ucos+lwip不稳定?  标签: ucos  lwip  分类: 技术笔记 2009-08-11 22:36 前两天利用fpga的开发板,跑通了simple_socket_sever。开发板上是ep2c8的核,网络芯片用的是8019。最初有个问题,网络link指示灯一闪一闪的,ping的时候也是时通时不通,经过多次调试发现原来是网络线太长了,我用大概有10多米,最后换到3米左右的网络,问题解决。这个问题可能还和开发板的网络芯片供电有关,8019的网卡对网线的支持应该几十米都没有问题。

我用自己写客户端登陆simple_socket_sever,与telnet登陆一样,都能正常的工作,但是仍然有一些疑问。

如果输入的命令太长,sever端会的网络服务会死掉,但是开发板程序并没有死,ucos的任务也没有死。网络服务死了,ping不通,并且client也无法再次登陆。

后来我把利用simple_socket_sever写了个简单client,可以正常的登陆我自己写的sever,但发现有同样的问题,在待机一段时间中,lwip的任务会死掉,connect会断开,但是过一段时间,又能从新连接上sever,我做的是不停的自动连接sever,如果连接上了就保持住连接,按一次键,向服务器发送一个数据,服务器返回一串数据。

nios的ide中不推荐用lwip,不知是不是因为这个问题。明天在试试跟踪进去看看,同时多了解一下lwip的处理流程,希望尽量采用ucos+lwip来做网络传输,否则采用ucliunx就麻烦了。

出0入0汤圆

 楼主| 发表于 2011-1-1 17:19:28 | 显示全部楼层
ding

出0入0汤圆

发表于 2011-1-1 18:33:21 | 显示全部楼层
我的Lwip看起来挺稳定的,无论是断线还是什么的,都能检测到。传输也没什么问题,但就是不能长时间运行,大概运行一两天左右就会驱动层就再也分配不到内存了,不知何故。不知道是哪个地方在吃内存,也是把我害惨了。不过测试了一下RTT的LWIP似乎没这个问题,挺坚强的.目前已经测试了将近一星期,再过一星期如果没问题的话以后所有的东西就都改用RTT了

出0入0汤圆

 楼主| 发表于 2011-1-2 12:54:43 | 显示全部楼层
回复【11楼】PZLPDY
-----------------------------------------------------------------------

楼上用的什么OS?

出0入0汤圆

发表于 2011-1-2 19:22:36 | 显示全部楼层
关注

出0入0汤圆

发表于 2011-1-2 21:58:04 | 显示全部楼层
lwip本身的稳定性还是不错的。只是tcp协议栈这东西对内存的要求可不一般,通常,我们的单片机都是要做server的,而且,经常是基于tcp的,他对内存的消耗不是一般的大,一个可靠稳定的内存管理对lwip的稳定是有很大的影响的,RTT内置有2种内存管理模式,这个是ucos所没有的,因此,如果要应用lwip,我相信基于rtt的,会比基于ucos的可靠性及稳定性要强很多。

出0入0汤圆

发表于 2011-1-2 23:28:54 | 显示全部楼层
不跑系统会不会稳定点,我目前在用microchip官方的TCPIP,没有系统,还没做完,好像还可以。

出0入0汤圆

发表于 2011-1-3 00:41:15 | 显示全部楼层
MARK

出0入0汤圆

 楼主| 发表于 2011-1-3 08:18:40 | 显示全部楼层
回复【5楼】eworker
从周立功网站的帖子看,zlg应该是通过修改lwip内核来解决提问者的问题的。
-----------------------------------------------------------------------

哪位高手说一下ZLG改了些什么?

出0入0汤圆

发表于 2011-1-3 08:32:52 | 显示全部楼层
好东西

出0入0汤圆

发表于 2011-1-3 20:11:38 | 显示全部楼层
回复【4楼】eworker  
回复【2楼】wyoujtg
我们这边的应用包括
telnet sntp ping ftpd tftp goahead vpn ssl rpc nfs....
事实证明lwip还是挺可靠的
-----------------------------------------------------------------------
你用的什么版本?自己做过修改么?用的什么操作系统?能说一下么!
-----------------------------------------------------------------------

最新版
我们做的修改都会提交的
用自己的RTOS

出0入0汤圆

 楼主| 发表于 2011-1-3 20:24:38 | 显示全部楼层
那就是1.4.0rc了,都做了那些方面的修改?内存管理么?不知道ZLG提交了没。

出0入0汤圆

发表于 2011-1-4 09:11:49 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2011-1-4 11:00:33 | 显示全部楼层
回复【20楼】eworker
那就是1.4.0rc了,都做了那些方面的修改?内存管理么?不知道zlg提交了没。
-----------------------------------------------------------------------

出0入0汤圆

 楼主| 发表于 2011-1-5 21:47:54 | 显示全部楼层
看到有人说做server没问题,做client问题很多

出0入0汤圆

 楼主| 发表于 2011-1-8 08:30:29 | 显示全部楼层
回复【19楼】wyoujtg
回复【4楼】eworker   
回复【2楼】wyoujtg  
我们这边的应用包括  
telnet sntp ping ftpd tftp goahead vpn ssl rpc nfs....  
事实证明lwip还是挺可靠的
-----------------------------------------------------------------------
你用的什么版本?自己做过修改么?用的什么操作系统?能说一下么!
-----------------------------------------------------------------------
最新版
我们做的修改都会提交的
用自己的rtos

-----------------------------------------------------------------------

LS,你的提交如何查得到?能不能发到论坛上?

出0入0汤圆

发表于 2011-1-9 14:49:31 | 显示全部楼层
觉得lz位贴的文章中client的问题主要还是用户自己写的代码有问题,在RT-Thread上写的client连接未开启的server都试了N多次了,不存在这种现象。

然后
>>  3.连接正常的情况下,如果拔掉网线,8962不能检测到断线,如何解决?  

关键还是驱动是如何写的!

出0入0汤圆

发表于 2012-4-14 23:40:14 | 显示全部楼层
eworker 发表于 2011-1-8 08:30
回复【19楼】wyoujtg
回复【4楼】eworker   
回复【2楼】wyoujtg  

我调试的时候发现,有时候会断开,连UCOS任务也跑不进去了,也就无法再连接上去了,有时候几个小时,有时候一天,有人有稳定的版本吗?我做客户端的

出0入0汤圆

发表于 2012-10-29 13:47:46 | 显示全部楼层
我现在也遇到这个断线重连的问题,等着解决啊!

出0入0汤圆

发表于 2012-11-1 10:02:07 | 显示全部楼层
我现在解决断线重边的问题是通过复位来解决的,因为在STM32F207+DP83848的情况下,DP83848检测到网络断开或重新连接会产生一个中断(进入服务函数EXTI15_10_IRQHandler()),然后在该函数中如果是网络断开,则标志网线连接状态的变量EthLinkStatus为非零值,如果是网线重连,则该变量值为0,而当该值为0时,也会调用网络相关的状态改变处理函数Eth_Link_ITHandler(DP83848_PHY_ADDRESS),最终我是在该函数中对系统进行复位来达到重连的目的的,但现在一方面系统复位重连的速度(与服务器端建立稳定有效通信的速度较慢)较慢,很多时候要等心跳包超时断开后第二次才能连接上网络,另一方面,采用复位的方式,还要考虑很多数据保存相关的事项,所以还是想不通过复位来解决该问题,不知道哪位大侠曾经解决过该问题的,麻烦指点一下,十分感谢!

出0入0汤圆

发表于 2012-11-1 15:54:25 | 显示全部楼层
好像把心跳包发送的间隔时间延长点,然后在关闭连接和重连之间加一定延时之后有点改善!现在基本上断开重连一次就成功了。不晓得还有没有其他方法!

出0入0汤圆

发表于 2012-11-1 16:10:46 | 显示全部楼层
Veiko 发表于 2012-11-1 15:54
好像把心跳包发送的间隔时间延长点,然后在关闭连接和重连之间加一定延时之后有点改善!现在基本上断开重连 ...

你的心跳包是什么?自定义的么?

出0入0汤圆

发表于 2012-11-6 13:41:33 | 显示全部楼层
aworker 发表于 2012-11-1 16:10
你的心跳包是什么?自定义的么?

暂时是自已随便定义了一个!

出0入0汤圆

发表于 2012-12-6 21:34:26 | 显示全部楼层
关注中,最近也在用这个做服务器。但连续多连几次容易死机啊

出0入0汤圆

发表于 2014-2-18 16:49:26 | 显示全部楼层
eworker 发表于 2010-12-31 22:37
哪位高手解说一下顶楼提到的问题?

测试结果和楼顶的一模一样 我以为是我程序问题  原来是个BUG

出0入0汤圆

发表于 2014-2-18 16:52:26 | 显示全部楼层
Veiko 发表于 2012-11-1 15:54
好像把心跳包发送的间隔时间延长点,然后在关闭连接和重连之间加一定延时之后有点改善!现在基本上断开重连 ...


分情况 一直保持连接  然后断开服务器的时候可以  别的情况不行,貌似只能做服务器比较稳定,我试试比较高的版本

出0入0汤圆

发表于 2014-2-18 16:56:44 | 显示全部楼层
屠龙LPC1788开发板 LWIP几十万次连接测试没有问题,做client也没问题。个人认为问题的出现在乎自己对系统的了解。

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2014-3-13 17:18:00 | 显示全部楼层
求稳定版的程序,平台stm32f107+dp83848+UC,类似也可

出0入17汤圆

发表于 2014-4-3 14:24:40 | 显示全部楼层
右手戒指 发表于 2014-3-13 17:18
求稳定版的程序,平台stm32f107+dp83848+UC,类似也可

现在RTT自带的已经很稳定了

出0入0汤圆

发表于 2014-6-18 16:45:46 | 显示全部楼层
xi_liang 发表于 2014-2-18 16:56
屠龙LPC1788开发板 LWIP几十万次连接测试没有问题,做client也没问题。个人认为问题的出现在乎自己对系统的 ...

LWIP几十万次连接测试没有问题,做client也没问题 。。。请问下1788的板lwip客户端 也是基于RTT系统做的吗?

出0入0汤圆

发表于 2014-6-18 21:20:00 | 显示全部楼层
能否提供  提供 LWIP 源码

出0入0汤圆

发表于 2014-6-19 02:14:28 | 显示全部楼层
gerbansh520 发表于 2014-6-18 16:45
LWIP几十万次连接测试没有问题,做client也没问题 。。。请问下1788的板lwip客户端 也是基于RTT系统做的 ...

不是基于RTT的,裸机的

出0入0汤圆

发表于 2014-6-19 09:21:16 | 显示全部楼层
xi_liang 发表于 2014-6-19 02:14
不是基于RTT的,裸机的

我有个1768的板,TCP客户端程序是可以收发数据的,就是有一个问题没有解决:当tcp客户端正常连接到电脑上的服务器后,如果电脑上的服务器每隔一段时间关闭并打开,重复几次后,tcp客户端就和电脑上的服务器连接不上了 看了论坛里有些也反映这个问题 说是lwip的bug 不知道怎么解决了,楼主有这样的问题吗?

出0入0汤圆

发表于 2014-6-27 06:46:34 | 显示全部楼层
gerbansh520 发表于 2014-6-19 09:21
我有个1768的板,TCP客户端程序是可以收发数据的,就是有一个问题没有解决:当tcp客户端正常连接到电脑上 ...

我们的没有这个问题,连接和收发都挺稳定的。 能把有问题的帖子贴上来看下吗

出100入101汤圆

发表于 2014-6-27 07:02:08 | 显示全部楼层
gerbansh520 发表于 2014-6-19 09:21
我有个1768的板,TCP客户端程序是可以收发数据的,就是有一个问题没有解决:当tcp客户端正常连接到电脑上 ...

电脑上的服务器每隔一段时间关闭并打开,重复几次后,就挂了。这么容易挂应该是应用方法哪里有问题,传你测试用的工程文件上来,让大家分析下。

出0入0汤圆

发表于 2014-6-27 07:05:45 | 显示全部楼层
请问STM32F207+DP83848,这个方案主要干什么用?

出0入0汤圆

发表于 2014-6-27 07:25:17 | 显示全部楼层
右手戒指 发表于 2014-3-13 17:18
求稳定版的程序,平台stm32f107+dp83848+UC,类似也可

stm32f107+dp83848的lwip源码,官网上有http://www.st.com/web/en/catalog/tools/PF257862#

出0入0汤圆

发表于 2014-6-27 09:00:24 | 显示全部楼层
fengyunyu 发表于 2014-6-27 07:02
电脑上的服务器每隔一段时间关闭并打开,重复几次后,就挂了。这么容易挂应该是应用方法哪里有问题,传你 ...

在记一次lwip中 遇到 pcb == pcb->next 的pcb死循环debug过程这个贴中看到阁下的回帖 让我明白过来了
tcp_abort和tcp_close的区别 我把服务器断开 然后客户端一直重连,根本就不会收到对方的RST信号,
然后一直重新创建pcb 然后close 内存就出问题了,前天改成连上后断开就用close、没连上重连就abort
测试了40个小时 没有死机了 一直都可以随时连上服务器 算是稳定了吧 不过如果阁下有空也可以帮忙看看
我的工程文件吧 反正你对这个很熟悉 或许还可以帮忙看看有没其他的问题 这个只是个客户端基本的框架
后续的应用程序还没开始加载进去 多谢!

出0入0汤圆

发表于 2014-6-27 09:01:42 | 显示全部楼层
本帖最后由 gerbansh520 于 2014-6-27 09:10 编辑

为什么总是传不了附件呢。。。我都够权限
百度云盘下载 链接: http://pan.baidu.com/s/1dD1mUDN 密码: d354

出0入0汤圆

发表于 2014-6-27 09:07:46 | 显示全部楼层
直接用linux吧 ,linux的网络功能很强大。

出0入0汤圆

发表于 2014-6-27 09:11:38 | 显示全部楼层
chenyun 发表于 2014-6-27 09:07
直接用linux吧 ,linux的网络功能很强大。

产品只是做数据中继,服务器那边用的是linux的 总工选型都定了 不是我能改的

出100入101汤圆

发表于 2014-6-27 10:14:19 | 显示全部楼层
gerbansh520 发表于 2014-6-27 09:00
在记一次lwip中 遇到 pcb == pcb->next 的pcb死循环debug过程这个贴中看到阁下的回帖 让我明白过来了
tc ...

很高兴我的回复看起来起了点作用,建议你升级到lwip1.4.1。

出0入0汤圆

发表于 2014-6-27 10:42:11 | 显示全部楼层
fengyunyu 发表于 2014-6-27 10:14
很高兴我的回复看起来起了点作用,建议你升级到lwip1.4.1。

我觉得用LWIP作客户端的人也不算少了 但是找不到什么有价值的贴参考,除了你的一两个外,
做客户端的肯定要一直重连的,但是没看到有贴做过这个 裸机的都是连一次点个LED之类的就断开
只用到tcp客户端 1.4.1也对这个进行修正了吗?

出100入101汤圆

发表于 2014-6-27 10:58:24 | 显示全部楼层
gerbansh520 发表于 2014-6-27 10:42
我觉得用LWIP作客户端的人也不算少了 但是找不到什么有价值的贴参考,除了你的一两个外,
做客户端的肯定 ...

lwip1.4.1修正的bug比较多,可以看lwip的changelog。如果真的是tcp_close、tcp_abort使用问题,倒和是不是lwip1.4.1没有关系。

出0入0汤圆

发表于 2014-6-27 10:58:38 | 显示全部楼层
fengyunyu 发表于 2014-6-27 10:14
很高兴我的回复看起来起了点作用,建议你升级到lwip1.4.1。

谢谢你的建议,还有个问题想请教一下,lwip下面有个socket。c 论坛里RTT系统下面就是用socket接口写的,
RAW API跟socket有什么区别吗?看代码机制是一样的 都是bind connet recv等,可以帮忙对比下吗?

出100入101汤圆

发表于 2014-6-27 11:03:18 | 显示全部楼层
gerbansh520 发表于 2014-6-27 10:58
谢谢你的建议,还有个问题想请教一下,lwip下面有个socket。c 论坛里RTT系统下面就是用socket接口写的,
...

我知道的是:socket方式要os配合,写程序方便些,ram占用多些。raw相反。

出0入0汤圆

发表于 2014-6-27 11:20:43 | 显示全部楼层
fengyunyu 发表于 2014-6-27 11:03
我知道的是:socket方式要os配合,写程序方便些,ram占用多些。raw相反。

原来这样啊 多谢

出0入0汤圆

发表于 2014-6-27 16:44:50 | 显示全部楼层
xi_liang 发表于 2014-6-27 07:25
stm32f107+dp83848的lwip源码,官网上有http://www.st.com/web/en/catalog/tools/PF257862#

谢谢

出0入0汤圆

发表于 2014-6-28 15:26:57 | 显示全部楼层
fengyunyu 发表于 2014-6-27 10:14
很高兴我的回复看起来起了点作用,建议你升级到lwip1.4.1。

大侠,坛子里有说1.4.1的不稳定啊 而且我移植了 有个sys_now错误怎么解决?请问下你移植了测试过吗?到底哪个版本稳定啊

出100入101汤圆

发表于 2014-6-28 16:07:32 | 显示全部楼层
gerbansh520 发表于 2014-6-28 15:26
大侠,坛子里有说1.4.1的不稳定啊 而且我移植了 有个sys_now错误怎么解决?请问下你移植了测试过吗?到底 ...

未发现不稳定,目前公司的产品上跑的就是lwip1.4.1。是不是移植到lwip1.4.1,还是要你自己决定。

sys_now是获取系统时间的。

u32 sys_now(void)
{
    return nowTime;
}

nowTime是一个全局变量,在定时器中每ms递增1。

出0入0汤圆

发表于 2014-6-28 16:26:51 | 显示全部楼层
fengyunyu 发表于 2014-6-28 16:07
未发现不稳定,目前公司的产品上跑的就是lwip1.4.1。是不是移植到lwip1.4.1,还是要你自己决定。

sys_no ...

sys_now函数是怎么被调用的呢?1.3里面设置了个250ms轮询LwIP_Periodic_Handle,lwip1.4里的250ms是哪个函数实现的呢?找不到。。

出0入0汤圆

发表于 2014-6-28 16:40:35 | 显示全部楼层
fengyunyu 发表于 2014-6-28 16:07
未发现不稳定,目前公司的产品上跑的就是lwip1.4.1。是不是移植到lwip1.4.1,还是要你自己决定。

sys_no ...

这位仁兄能帮我看看还要添加什么吗?sys now函数加到lpc_17xx-it.c里了 lwip是1.4的编译通过了
百度网盘 链接: http://pan.baidu.com/s/1sjsbbvZ 密码: a8f7

出100入101汤圆

发表于 2014-6-28 16:48:44 | 显示全部楼层
gerbansh520 发表于 2014-6-28 16:40
这位仁兄能帮我看看还要添加什么吗?sys now函数加到lpc_17xx-it.c里了 lwip是1.4的编译通过了
百度网盘  ...

使用方式可以和lwip1.3.2一样。在主循环中或像你程序中的System_Periodic_Handle处理lwip即可。

            // 读取网口数据,并处理
            if (ETH_CheckFrameReceived())
            {
                LwIP_Pkt_Handle();
            }
            
            // 执行LWIP的一些周期性任务
            LwIP_Periodic_Handle(LocalTime);

出0入0汤圆

发表于 2014-6-28 16:57:02 | 显示全部楼层
fengyunyu 发表于 2014-6-28 16:48
使用方式可以和lwip1.3.2一样。在主循环中或像你程序中的System_Periodic_Handle处理lwip即可。

        ...

看到1.4就是增加了timer.c def.c,在timer。c里有个 sys_check_timeouts,我加到主循环中了 但是还是不工作,
按你说的 和lwip1.3.2一样使用System_Periodic_Handle就可以工作了 正在测试。1.4里修改了tcp write函数这些的,周末测试一下。
仁兄你也是没有调用 sys_check_timeouts函数吗?

出100入101汤圆

发表于 2014-6-28 16:59:54 | 显示全部楼层
gerbansh520 发表于 2014-6-28 16:57
看到1.4就是增加了timer.c def.c,在timer。c里有个 sys_check_timeouts,我加到主循环中了 但是还是不工 ...

没有使用,和lwip1.3.2的使用方式相同。

出0入0汤圆

发表于 2014-6-28 17:16:33 | 显示全部楼层
fengyunyu 发表于 2014-6-28 16:59
没有使用,和lwip1.3.2的使用方式相同。

多谢 周末测试下

出0入0汤圆

发表于 2014-6-28 23:44:03 | 显示全部楼层
mark,留着以后用

出0入0汤圆

发表于 2014-6-30 15:24:50 | 显示全部楼层
本帖最后由 gerbansh520 于 2014-6-30 15:29 编辑
fengyunyu 发表于 2014-6-28 16:59
没有使用,和lwip1.3.2的使用方式相同。


再次请教一下大侠,如果用Lwip做3个客户端 是否要用到操作系统啊?裸机能不能完成呢?
客户端A B C分别连到3个不同的服务器(同一个局域网内),正常情况适用客户端A,如果A所
连接的服务器停了,就适用B客户端,依次再使用C客户端。

出100入101汤圆

发表于 2014-6-30 15:43:23 | 显示全部楼层
gerbansh520 发表于 2014-6-30 15:24
再次请教一下大侠,如果用Lwip做3个客户端 是否要用到操作系统啊?裸机能不能完成呢?
客户端A B C分别连 ...

不是什么大侠,lwip也是才入门水平。客户端数量和用不用os没关系。

出0入0汤圆

发表于 2014-6-30 16:09:11 | 显示全部楼层
fengyunyu 发表于 2014-6-30 15:43
不是什么大侠,lwip也是才入门水平。客户端数量和用不用os没关系。

多谢兄台哈 其实我也不知怎么称呼比较好

出0入0汤圆

发表于 2014-6-30 16:57:27 | 显示全部楼层
fengyunyu 发表于 2014-6-30 15:43
不是什么大侠,lwip也是才入门水平。客户端数量和用不用os没关系。

有个疑问,建立3个客户端pcb ,系统执行250ms循环处理的函数
void LwIP_Periodic_Handle(__IO uint32_t localtime)
{
  /* TCP periodic process every 250 ms */
  if (localtime - TCPTimer >= TCP_TMR_INTERVAL)
  {
    TCPTimer =  localtime;
    tcp_tmr();
  }
  /* ARP periodic process every 5s */
  if (localtime - ARPTimer >= ARP_TMR_INTERVAL)
  {
    ARPTimer =  localtime;
    etharp_tmr();
  }
} 有3个有效的 tcp_active_pcbs 的话,执行循环的时候会冲突吧??

出100入101汤圆

发表于 2014-6-30 20:06:22 | 显示全部楼层
gerbansh520 发表于 2014-6-30 16:57
有个疑问,建立3个客户端pcb ,系统执行250ms循环处理的函数
void LwIP_Periodic_Handle(__IO uint32_t l ...

显然不会。具体机理也不甚了了。

出0入0汤圆

发表于 2014-6-30 21:04:19 | 显示全部楼层
深有同感!!

出0入0汤圆

发表于 2014-7-7 11:51:14 | 显示全部楼层
fengyunyu 发表于 2014-6-27 10:58
lwip1.4.1修正的bug比较多,可以看lwip的changelog。如果真的是tcp_close、tcp_abort使用问题,倒和是不 ...

哥们好,我把lwip官网上的git版本下载了,master版本的http://git.savannah.gnu.org/cgit/lwip.git/log/
在测试收发数据250ms 发送50个字节数据然后回显,发现一两天不定时会死机,但是用1.4.1(2012年)
http://download.savannah.gnu.org/releases/lwip/ 这个版本相反的还稳定点。你用的是哪个版本的
1.4.1呢?

出100入101汤圆

发表于 2014-7-7 15:03:52 | 显示全部楼层
gerbansh520 发表于 2014-7-7 11:51
哥们好,我把lwip官网上的git版本下载了,master版本的http://git.savannah.gnu.org/cgit/lwip.git/log/
...

STABLE-1_4_1.tar.gz  

出0入0汤圆

发表于 2014-7-7 16:02:08 | 显示全部楼层

多谢。。。。。。。

出0入0汤圆

发表于 2014-7-8 09:05:19 | 显示全部楼层

哥们,请教下lwip中发送数据量的大小与lwipopts。h中设置的一些参数之间的关系 这个你了解吗?
我看到1.4.1里面的lwipopts.h跟1.3的差别很大啊 我把1.4的移植了但是lwipopts。h文件配置用的是
1.3的,请问你的那个产品中lwipopts。h也是用STABLE-1_4_1\test\unit\lwipots.h这个吗?
我要做的东西 客户端大概每次发送50个字节数据,间隔在200ms-1000ms之间,数据量不算大。
#define PBUF_POOL_SIZE          10//16
#define PBUF_POOL_BUFSIZE       1500//256
把这两个改小了 有时候会死机。究竟设多大 心里没谱。。
1.4.1里面的是这样的
/* Minimal changes to opt.h required for tcp unit tests: */
#define MEM_SIZE                        16000
#define TCP_SND_QUEUELEN                40
#define MEMP_NUM_TCP_SEG                TCP_SND_QUEUELEN
#define TCP_SND_BUF                     (12 * TCP_MSS)
#define TCP_WND                         (10 * TCP_MSS)

出100入101汤圆

发表于 2014-7-8 10:25:25 | 显示全部楼层
gerbansh520 发表于 2014-7-8 09:05
哥们,请教下lwip中发送数据量的大小与lwipopts。h中设置的一些参数之间的关系 这个你了解吗?
我看到1.4 ...



#ifndef __LWIPOPTS_H__
#define __LWIPOPTS_H__

/**
* SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain
* critical regions during buffer allocation, deallocation and memory
* allocation and deallocation.
*/
#define SYS_LIGHTWEIGHT_PROT    0

/**
* NO_SYS==1: Provides VERY minimal functionality. Otherwise,
* use lwIP facilities.
*/
#define NO_SYS                  1

/* ---------- Memory options ---------- */
/* MEM_ALIGNMENT: should be set to the alignment of the CPU for which
   lwIP is compiled. 4 byte alignment -> define MEM_ALIGNMENT to 4, 2
   byte alignment -> define MEM_ALIGNMENT to 2. */
#define MEM_ALIGNMENT           4

/* MEM_SIZE: the size of the heap memory. If the application will send
a lot of data that needs to be copied, this should be set high. */
#define MEM_SIZE                (10*1024)

/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application
   sends a lot of data out of ROM (or other static memory), this
   should be set high. */
#define MEMP_NUM_PBUF           64
/* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
   per active UDP "connection". */
#define MEMP_NUM_UDP_PCB        5
/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP
   connections. */
#define MEMP_NUM_TCP_PCB        5
/* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP
   connections. */
#define MEMP_NUM_TCP_PCB_LISTEN 8
/* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP
   segments. */
#define MEMP_NUM_TCP_SEG        48
/* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active
   timeouts. */
#define MEMP_NUM_SYS_TIMEOUT    8


/* ---------- Pbuf options ---------- */
/* PBUF_POOL_SIZE: the number of buffers in the pbuf pool. */
#define PBUF_POOL_SIZE          40

/* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */
#define PBUF_POOL_BUFSIZE       256


/* ---------- TCP options ---------- */
#define LWIP_TCP                1
#define TCP_TTL                 255

/* Controls if TCP should queue segments that arrive out of
   order. Define to 0 if your device is low on memory. */
#define TCP_QUEUE_OOSEQ         0

/* TCP Maximum segment size. */
#define TCP_MSS                 (1500 - 40)          /* TCP_MSS = (Ethernet MTU - IP header size - TCP header size) */

/* TCP sender buffer space (bytes). */
#define TCP_SND_BUF             (8*TCP_MSS)

/*  TCP_SND_QUEUELEN: TCP sender buffer space (pbufs). This must be at least
  as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. */

#define TCP_SND_QUEUELEN        (10* TCP_SND_BUF/TCP_MSS)

/* TCP receive window. */
#define TCP_WND                 8192  //(2*TCP_MSS)

出0入0汤圆

发表于 2014-7-8 12:12:00 | 显示全部楼层
PBUF_POOL_SIZE  TCP_SND_BUF   TCP_SND_QUEUELEN TCP_WND 这些都修改了,有没有什么参考文档说明
具体到不同的应用 这些参数怎么配置呢?#define MEMP_NUM_TCP_SEG    48,队列里这么多pcb,请问下,
你那个产品的具体应用是怎样的呢?再次感谢这位哥们的指导~~~

出0入0汤圆

发表于 2014-7-8 16:11:13 | 显示全部楼层
fengyunyu 发表于 2014-7-8 10:25
#ifndef __LWIPOPTS_H__
#define __LWIPOPTS_H__

init.cl里面会报错的,
#if !MEMP_MEM_MALLOC && (MEMP_NUM_TCP_SEG < TCP_SND_QUEUELEN)
  #error "lwip_sanity_check: WARNING: MEMP_NUM_TCP_SEG should be at least as big as TCP_SND_QUEUELEN. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
#endif
修改 #define TCP_SND_QUEUELEN        (6 * TCP_SND_BUF)/TCP_MSS 又会报其他错误

出100入101汤圆

发表于 2014-7-8 16:34:41 | 显示全部楼层
gerbansh520 发表于 2014-7-8 16:11
init.cl里面会报错的,
#if !MEMP_MEM_MALLOC && (MEMP_NUM_TCP_SEG < TCP_SND_QUEUELEN)
  #error "lwip ...



你再试一下,我也搞不太懂。

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2014-7-9 08:29:03 | 显示全部楼层
fengyunyu 发表于 2014-7-8 16:34
你再试一下,我也搞不太懂。


一样会报错的哦

出0入0汤圆

发表于 2014-8-22 11:34:48 | 显示全部楼层
fengyunyu 发表于 2014-7-8 16:34
你再试一下,我也搞不太懂。

兄台,想再请教你个问题,不知能否解答。
我用的非阻塞方式,接收数据都没有问题,但是发送数据出现两帧数据变成一个包发给PC的现象。
板子串口固定200ms接收数据,然后通过TCP往PC服务器传数据,调用下面的函数发送
void write_rootmsg_to_tcp(uint8_t* buff, uint16_t buff_len)
{
        if(tcp_sndbuf(client1_pcb) >= buff_len)        
                tcp_write(client1_pcb,buff, buff_len,TCP_WRITE_FLAG_COPY);
        //tcp_output(client1_pcb);
}
网上搜索过类似的问题,tcp_write函数被调用后并不会马上发送出去,而是将数据拷贝到协议栈队列里,
由LWIP协议栈调用快速定时器500ms或慢速定时器250ms才发出去,需要加上tcp_output才立即发送,
但是我测试发现即使加上tcp_output函数后,也会出现下面截图里的现象,明明是两个帧数据,被打包
成一个包发给服务器的。而且使用tcp_output函数后,大概一天时间会出现死机,不调用这个函数就不会死机。
简单说就是抓包时发现两帧数据被打包成一个包。
比如第一帧调用函数write_rootmsg_to_tcp发送 1 2 3 4 5,
第二帧也调用函数write_rootmsg_to_tcp发送6 7 8 9 A,抓包发现一个包里的数据是
1 2 3 4 5 6 7 8 9 A,变成一个帧了,因为数据帧加了哈希算法校验的,而且不同类型的数据帧,
长度都不固定,同一个包扔给服务器,服务器不好解析处理,应该怎样处理才能做到每发送一次数据,
都只有一个包呢?

出100入101汤圆

发表于 2014-8-22 13:11:53 | 显示全部楼层
gerbansh520 发表于 2014-8-22 11:34
兄台,想再请教你个问题,不知能否解答。
我用的非阻塞方式,接收数据都没有问题,但是发送数据出现两帧 ...

不懂,帮不到你。

出0入0汤圆

发表于 2014-11-12 09:54:21 | 显示全部楼层
gerbansh520 发表于 2014-7-8 09:05
哥们,请教下lwip中发送数据量的大小与lwipopts。h中设置的一些参数之间的关系 这个你了解吗?
我看到1.4 ...

请问lwipopt.h的配置问题你搞清楚了吗?

出0入0汤圆

发表于 2014-11-12 10:36:47 | 显示全部楼层
现在在用lwip的1.4.1暂时还蛮稳定的

出0入0汤圆

发表于 2014-11-14 16:42:10 | 显示全部楼层
benhaha 发表于 2014-11-12 10:36
现在在用lwip的1.4.1暂时还蛮稳定的

我的TCP做客户端,每隔100ms往服务器发送几百字节的数据,不稳定啊,wireshark抓包一两个小时就会出现一次Tcp retransmission重传,这个是客户端发出来的,
然后服务器给客户端发送Tcp dup ack(tcp重复应答),但是重传的这个数据包 在2秒之前服务器已经给回了ACK,不知道为什么重传。。

出0入0汤圆

发表于 2015-12-31 23:38:42 | 显示全部楼层
我今天才移值成功,在nios+ucosii+lwip1.4.1 ,元旦回来再测试下

出0入0汤圆

发表于 2018-12-23 22:51:41 | 显示全部楼层
ffxz 发表于 2011-1-9 14:49
觉得lz位贴的文章中client的问题主要还是用户自己写的代码有问题,在RT-Thread上写的client连接未开启的ser ...


来,我来冒个泡,即便是RTT+lwip , 该问题依然存在,只是时间长短问题罢了,具体就不说了。可能有些人没说罢了。
LWIP太浪费时间,折腾人。。已经切换到了RTX + TCPNET。。。得找个时间把LWIP给完全梨一遍,要不然,我是不敢了。。

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

本版积分规则

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

GMT+8, 2024-3-29 05:36

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

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