xtaens 发表于 2015-1-8 09:23:02

lwip有bug了?ping一段时间后时间从1ms变到了900多ms,几分钟...

本帖最后由 xtaens 于 2015-1-8 11:56 编辑

首先说下我的条件:

lpc1788 跑120M
lwip 1.4.1 裸跑

phy:dp83848


堆、栈分配十分充裕,96KB的RAM还剩余不到8KB,除了程序占用的外,其他的全部分配了。

现在系统只裸跑了lwip,闪烁了一个led灯,再没有做其他事情。


现象描述:ping的数据包大小从0到1471字节随机变化,有时连续ping了26个小时才出现ping时间变慢的情况,有时ping几分钟就出现了ping时间过长的现象。

时间短时小于1ms,时间长时是900多ms,只要出现900多ms后,从此ping的时间就一直在900ms左右变化,再也回不到小于1ms了,除非把系统复位。

时间变长(超时)后我的led闪烁频率正常,说明系统时钟频率没有下降,可能是lwip内核哪里阻塞了?RAM满了?内存不够分配了?它怎么就慢下来了?

这个现象是不是说明lwip有bug?


没有超时时的时间小于1ms



超时时的时间






static/image/hrline/4.gif


附加:哪位要测试的话这样设置哦

黄晨0410 发表于 2015-1-8 10:14:57

一起关注,现在在学习stm32+LWIP

daleda 发表于 2015-1-8 10:21:14

还是多检查自己的移植

benhaha 发表于 2015-1-8 10:25:02

我用1788没出现你说的这些问题,也是lwip1.4.1;

xtaens 发表于 2015-1-8 10:38:29

benhaha 发表于 2015-1-8 10:25
我用1788没出现你说的这些问题,也是lwip1.4.1;

哦,你连续ping了吗?

不要使用电脑自带的ping,用ATKKPING软件,勾选忽略超时选项你再试试

xtaens 发表于 2015-1-8 10:39:26

benhaha 发表于 2015-1-8 10:25
我用1788没出现你说的这些问题,也是lwip1.4.1;

你的emac驱动用的是哪个呢

xtaens 发表于 2015-1-8 10:40:30

daleda 发表于 2015-1-8 10:21
还是多检查自己的移植

移植部分我分析过,没发现什么问题

magicoe 发表于 2015-1-8 11:27:28

我觉得是你移植的问题,我用的是4088的板子,测试的,晚上再做一下长时间的测量。
建议使用NXP那个LPCOPEN里的。

还有你Ping包是300,而Reply的明显偏大,不止300.很奇怪

xtaens 发表于 2015-1-8 11:37:43

magicoe 发表于 2015-1-8 11:27
我觉得是你移植的问题,我用的是4088的板子,测试的,晚上再做一下长时间的测量。
建议使用NXP那个LPCOPEN ...

你看错啦

我ping的数据量是0到1472随机变化的,你看到的300只是我停下来时ping的包的大小

你测试时不要选择固定大小的包,包大小最后随机变化

设置如下图:




另外,我的emac驱动用的是lpcopen上下载的

xtaens 发表于 2015-1-8 11:40:45

magicoe 发表于 2015-1-8 11:27
我觉得是你移植的问题,我用的是4088的板子,测试的,晚上再做一下长时间的测量。
建议使用NXP那个LPCOPEN ...

这个是我的emac驱动,官网下载的。和iar目录下的一样

embeddev_1 发表于 2015-1-8 11:47:50

lwip问题是很多呀!很难长期稳定可靠运行

xtaens 发表于 2015-1-8 11:50:44

embeddev_1 发表于 2015-1-8 11:47
lwip问题是很多呀!很难长期稳定可靠运行

你遇到过什么问题呢?

我现在基本能保证20小时能连续的ping 不超时(小于1ms)



magicoe 发表于 2015-1-8 11:51:10

本帖最后由 magicoe 于 2015-1-8 11:54 编辑

xtaens 发表于 2015-1-8 11:40
这个是我的emac驱动,官网下载的。和iar目录下的一样

你如果是上海的客户,可以来我公司一趟,喝点茶,挑挑板子。

900多ms的时候你的Heap还有多少啊?

fengyunyu 发表于 2015-1-8 11:53:58

lwip在ping功能上,肯定没有bug,检查自己软硬件原因。

xtaens 发表于 2015-1-8 12:01:21

本帖最后由 xtaens 于 2015-1-8 13:09 编辑

magicoe 发表于 2015-1-8 11:51
你如果是上海的客户,可以来我公司一趟,喝点茶,挑挑板子。

900多ms的时候你的Heap还有多少啊? ...

来不了啊

900ms   heap剩余多少,这个不清楚


我设置的heap的大小是:



/**
* 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                (16*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         10
/* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
   per active UDP "connection". */
#define MEMP_NUM_UDP_PCB      6
/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP
   connections. */
#define MEMP_NUM_TCP_PCB      10
/* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP
   connections. */
#define MEMP_NUM_TCP_PCB_LISTEN 6
/* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP
   segments. */
#define MEMP_NUM_TCP_SEG      12
/* 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          10

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


/* ---------- 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             (2*TCP_MSS)

/* TCP sender buffer space (pbufs). This must be at least = 2 *
   TCP_SND_BUF/TCP_MSS for things to work. */
#define TCP_SND_QUEUELEN      (6 * TCP_SND_BUF)/TCP_MSS

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


/* ---------- ICMP options ---------- */
#define LWIP_ICMP                     1


/* ---------- DHCP options ---------- */
/* Define LWIP_DHCP to 1 if you want DHCP configuration of
   interfaces. DHCP is not implemented in lwIP 0.5.1, however, so
   turning this on does currently not work. */
#define LWIP_DHCP               0


/* ---------- UDP options ---------- */
#define LWIP_UDP                1
#define UDP_TTL               255


/* ---------- Statistics options ---------- */
#define LWIP_STATS            0
//#define LWIP_PROVIDE_ERRNO      1


/*
   --------------------------------------
   ---------- Checksum options ----------
   --------------------------------------
*/

/*
The STM32F107 allows computing and verifying the IP, UDP, TCP and ICMP checksums by hardware:
- To use this feature let the following define uncommented.
- To disable it and process by CPU comment thethe checksum.
*/
//#define CHECKSUM_BY_HARDWARE


#ifdef CHECKSUM_BY_HARDWARE
/* CHECKSUM_GEN_IP==0: Generate checksums by hardware for outgoing IP packets.*/
#define CHECKSUM_GEN_IP               0
/* CHECKSUM_GEN_UDP==0: Generate checksums by hardware for outgoing UDP packets.*/
#define CHECKSUM_GEN_UDP                0
/* CHECKSUM_GEN_TCP==0: Generate checksums by hardware for outgoing TCP packets.*/
#define CHECKSUM_GEN_TCP                0
/* CHECKSUM_CHECK_IP==0: Check checksums by hardware for incoming IP packets.*/
#define CHECKSUM_CHECK_IP               0
/* CHECKSUM_CHECK_UDP==0: Check checksums by hardware for incoming UDP packets.*/
#define CHECKSUM_CHECK_UDP            0
/* CHECKSUM_CHECK_TCP==0: Check checksums by hardware for incoming TCP packets.*/
#define CHECKSUM_CHECK_TCP            0
#else
/* CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets.*/
#define CHECKSUM_GEN_IP               1
/* CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets.*/
#define CHECKSUM_GEN_UDP                1
/* CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets.*/
#define CHECKSUM_GEN_TCP                1
/* CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets.*/
#define CHECKSUM_CHECK_IP               1
/* CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets.*/
#define CHECKSUM_CHECK_UDP            1
/* CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets.*/
#define CHECKSUM_CHECK_TCP            1
#endif


/*
   ----------------------------------------------
   ---------- Sequential layer options ----------
   ----------------------------------------------
*/
/**
* LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c)
*/
#define LWIP_NETCONN                  0

#endif /* __LWIPOPTS_H__ */

xtaens 发表于 2015-1-8 12:02:09

fengyunyu 发表于 2015-1-8 11:53
lwip在ping功能上,肯定没有bug,检查自己软硬件原因。

现在不知道从哪里开始找原因呢

embeddev_1 发表于 2015-1-8 13:10:42

xtaens 发表于 2015-1-8 11:50
你遇到过什么问题呢?

我现在基本能保证20小时能连续的ping 不超时(小于1ms)


20小时算什么,1个月100ms 定时发送不丢包,w5500能做到,lwip做不到!{:biggrin:}

xtaens 发表于 2015-1-8 13:20:41

本帖最后由 xtaens 于 2015-1-8 13:27 编辑

embeddev_1 发表于 2015-1-8 13:10
20小时算什么,1个月100ms 定时发送不丢包,w5500能做到,lwip做不到!...

你的意思是lwip不好用?或不稳定?




刚才看了一下这个55

特点及优势


全硬件TCP/IP协议栈

            -   支持TCP、UDP、ICMP、IPv4、ARP、IGMP、PPPoE协议


            -   非可攻击性的硬件网络引擎,以防止类似于洪流,诈骗式及注入式网络攻击


主机接口:高速串行外设接口(SPI)

            -SPI 模式:0,3 / 最高80Mhz SPI时钟


            -通过使用SPI来降低MCU的GPIOs的占用率(之前与留下来的GPIOs可以被其他功能使用)


降低热耗损失(W5500:40℃ /其他芯片:60~70℃)

支持嵌入式操作系统驱动程序:Linux(kernel 2.4.xx, 2.6.xx, 3.1,xx)& RTOS

8个独立的硬件Socket

内部32bytes片上缓存以供TCP/IP包处理

更加高效的功耗管理:掉电模式&通过UDP网络唤醒

集成10BaseT / 100Base-T以太网PHY

支持自动协商(全/半双工,10M/100M)

工作电压3.3V,I/O 5V耐压

LED 演示输出(数据收/发,全/半双工,连接状态,连接速度)

48引脚LQFP无铅封装(7x7mm, 0.5mm针间距)

embeddev_1 发表于 2015-1-8 13:37:08

这个问题讨论多了就成挨喷了,商用最好还是用过市场验证过的芯片!自己玩的就不说了{:dizzy:}

esdart 发表于 2015-1-8 13:57:45

看来上面的我5500描述的确不错。lwip有没有什么优势比这个5500要强的呢

xtaens 发表于 2015-1-8 14:02:50

esdart 发表于 2015-1-8 13:57
看来上面的我5500描述的确不错。lwip有没有什么优势比这个5500要强的呢

lwip是免费的,呵呵

erxun 发表于 2015-1-8 14:35:40

LPC1788~~~
PHY用的什么形式接口MII ?RMII?
MII不稳定~~~属于单片机硬件BUG,去年我中招过~

fengyunyu 发表于 2015-1-8 16:13:10

esdart 发表于 2015-1-8 13:57
看来上面的我5500描述的确不错。lwip有没有什么优势比这个5500要强的呢

前段时间时间看介绍,5500一个socket只能建立一个连接。这是个问题。

fengyunyu 发表于 2015-1-8 16:16:02

embeddev_1 发表于 2015-1-8 13:10
20小时算什么,1个月100ms 定时发送不丢包,w5500能做到,lwip做不到!...

丢包或不丢包,其实和lwip关系不大。

xtaens 发表于 2015-1-8 16:38:13

erxun 发表于 2015-1-8 14:35
LPC1788~~~
PHY用的什么形式接口MII ?RMII?
MII不稳定~~~属于单片机硬件BUG,去年我中招过~ ...

RMII接口

xtaens 发表于 2015-1-8 16:39:22

erxun 发表于 2015-1-8 14:35
LPC1788~~~
PHY用的什么形式接口MII ?RMII?
MII不稳定~~~属于单片机硬件BUG,去年我中招过~ ...

你现在的lwip跑的稳定吗


能否按照我楼主位的设置方法测试一下吗

embeddev_1 发表于 2015-1-8 16:50:06

做过再说吧! 拿出你做的稳定产品show出来比什么都管用{:biggrin:}

esdart 发表于 2015-1-8 16:54:38

xtaens 发表于 2015-1-8 14:02
lwip是免费的,呵呵

w5500并不比phy芯片贵多少。不过看5500支持较少。
我对网络不熟悉,产品要用到。现在在选型。

Kevin.U 发表于 2015-1-8 17:02:34

lwip对内存的管理还是比较讲究的,有可能时间长了,内存分配碎片。

xtaens 发表于 2015-1-8 18:20:30

Kevin.U 发表于 2015-1-8 17:02
lwip对内存的管理还是比较讲究的,有可能时间长了,内存分配碎片。

这个碎片怎么解决呢

总不能定时复位系统吧

s200661524 发表于 2015-1-8 21:28:50

应该没问题,我用电脑ping了几天都没问题

xtaens 发表于 2015-1-8 22:32:33

s200661524 发表于 2015-1-8 21:28
应该没问题,我用电脑ping了几天都没问题

哦,能否用我的那个设置(楼主位最后一张图)测试一下呢

xtaens 发表于 2015-1-9 08:34:43

我再来顶顶,等待+测试中

xtaens 发表于 2015-1-9 13:03:32

magicoe 发表于 2015-1-8 11:51
你如果是上海的客户,可以来我公司一趟,喝点茶,挑挑板子。

900多ms的时候你的Heap还有多少啊? ...

ls人去哪里了

没有测试吗?

xtaens 发表于 2015-1-12 09:02:56

最新测试效果:

1、有一快板子连续ping了117小时了还没出现一次超时情况

2、有一快板子已经超时,用抓包软件抓到的信息如下:虽然ping超时了,但从这里看,icmp包还有,这是怎么个情况?










kayatsl 发表于 2015-1-12 11:25:03

ping程序认为超时是有时间限制的

只要icmp的 relay超出时间范围就认为超时, 但不能看到超时就认为收不到relay包.

这种情况, 是可以被监测出来的, 你可以尝试遇到这种情况后, 单独将网卡初始化一下, 确认一下是协议栈的问题还是网卡的问题.

我以前遇到的绝大多数是网卡被轰挂了..



说一个例子, 我以前测试LWIP的时候, 一开始是用tcp连接, 100ms发一个1k的包做 tcp echo, 半天就死了..

调到后面, 还是用tcp连接,还是每次发1k的包, 但是延时改成10, 做tcp echo, 收发了一个月, 没问题.
               这里为什么用10ms, 是因为我用的是SPI网卡, 传输速率限制了, 如果太高, 一直window full, 数据发不出来.

               转为UDP连接, 还是每次1k的包, 延时直接改成0 , 做udp echo, 一直连续收发一个月..
            UDP的话, 丢包肯定会有, 单片机跟不上电脑速度, 丢个包正常, 但起码ping是不会出现大延时的.

xtaens 发表于 2015-1-12 12:32:56

本帖最后由 xtaens 于 2015-1-12 12:40 编辑

kayatsl 发表于 2015-1-12 11:25
ping程序认为超时是有时间限制的

只要icmp的 relay超出时间范围就认为超时, 但不能看到超时就认为收不到re ...

嗯,谢谢回答。非常好的经验

我下午看看超时时网卡dp83848是不是挂掉了

xtaens 发表于 2015-1-12 23:51:29

本帖最后由 xtaens 于 2015-1-12 23:54 编辑

kayatsl 发表于 2015-1-12 11:25
ping程序认为超时是有时间限制的

只要icmp的 relay超出时间范围就认为超时, 但不能看到超时就认为收不到re ...

晚上量了一下phy的硬件电路,电源电压、晶振、4.71K上的电压等参数都是正常的

软件上好像目前无法知道自己是不是超时了



收发脚的波形如下:









kayatsl 发表于 2015-1-13 09:37:29

软件可以知道超时, 你本地也往外发数据, 没收到回复几次就认为断了就可以了..

xtaens 发表于 2015-1-13 10:52:26

kayatsl 发表于 2015-1-13 09:37
软件可以知道超时, 你本地也往外发数据, 没收到回复几次就认为断了就可以了.. ...

好的,我试试

wx85105157 发表于 2015-1-13 13:30:43

这个波形。。。是探头带宽不够么?

xtaens 发表于 2015-1-13 19:34:40

wx85105157 发表于 2015-1-13 13:30
这个波形。。。是探头带宽不够么?

我也不太清楚,放上去就这样了

但是用触发功能却抓到了下面的正常的波形

powerk6 发表于 2015-1-13 21:28:57

内存分配问题?

xtaens 发表于 2015-1-21 11:39:38

fengyunyu 发表于 2015-1-8 16:16
丢包或不丢包,其实和lwip关系不大。

问题已经找到了。ping超时或时间变慢,都是我的MAC地址变成FF造成的,但是我的地址怎么变成FF了呢?

如下图:

xtaens 发表于 2015-1-21 11:41:10

powerk6 发表于 2015-1-13 21:28
内存分配问题?

不是,打开调试语句弄了好多次终于找到了

原来是我的MAC地址变成了FF造成的。为啥这样还在分析中

xtaens 发表于 2015-1-21 11:42:07

kayatsl 发表于 2015-1-12 11:25
ping程序认为超时是有时间限制的

只要icmp的 relay超出时间范围就认为超时, 但不能看到超时就认为收不到re ...

造成超时的原因已经找到了

原来是我的MAC地址变成了FF造成的。

xtaens 发表于 2015-1-21 11:42:59

magicoe 发表于 2015-1-8 11:27
我觉得是你移植的问题,我用的是4088的板子,测试的,晚上再做一下长时间的测量。
建议使用NXP那个LPCOPEN ...



我的超时等各种问题都是我的MAC地址变成了FF造成的。

原因还在分析

vmalloc 发表于 2015-2-5 09:47:37

w5500是全硬件的协议栈吗?是不是一个IC里面跑着程序?

wzd5230 发表于 2015-2-25 11:47:30

vmalloc 发表于 2015-2-5 09:47
w5500是全硬件的协议栈吗?是不是一个IC里面跑着程序?

单片机加lwip而已

vmalloc 发表于 2015-2-27 09:44:04

wzd5230 发表于 2015-2-25 11:47
单片机加lwip而已

....那有个毛的用,何必呢。

freewill2009 发表于 2015-3-6 11:22:03

1. 先排除其他的可能性,保证程序只有LWIP在运行;
2. 如果第一步还是有问题,则可能是lwip配置的问题, 恢复lwip到默认配置进行测试;
3. 还是有问题的话只能看看程序的系统配置了,120MHZ是否是你用的片子的标准时钟?若其他的问题只能一点一点找了。

sgweilong 发表于 2015-1-8 09:23:03

这个问题我之前在论坛上问过。不是LWIP的问题,是ethernetif.c里面的ethernetif_input没有处理好
http://www.amobbs.com/thread-5552043-1-1.html

xtaens 发表于 2015-6-27 14:14:09

sgweilong 发表于 2015-6-18 12:04
这个问题我之前在论坛上问过。不是LWIP的问题,是ethernetif.c里面的ethernetif_input没有处理好
http://ww ...

看来ls遇到的问题和我的一样,谢谢提醒

改天再把原来的程序弄出来试试。
页: [1]
查看完整版本: lwip有bug了?ping一段时间后时间从1ms变到了900多ms,几分钟...