首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

LWIP使用经验(4)

LWIP使用经验(4)

5.       同时打开

17双方同时打开

6.       同时关闭


18双方同时关闭

五正确使用LWIP一般说来LWIP协议栈是比较稳定的,尤其像V1.3.2经历过业界广泛使用和工程应用,完全可以应用于嵌入式产品。那为什么还是有很多人反映LWIP不稳定呢?主要是以下几个方面的原因:
1.      网络硬件驱动
确保EMAC口接收与发送稳定可靠

2.      移植LWIP 基于OS的移植代码正确稳定
3.      配置LWIP 根据设备RAM尺寸进行合理配置
1)        值(PBUF_POOL_SIZE * PBUF_POOL_BUFSIZE)必须大于TCP_SND_BUFTCP_WND,否则容易引起错误;
2)        当内存有限时TCP发送不能太快(具体值依赖于分配内存的大小),否则引起tcp_enqueue()逻辑错误;
4.      调用LWIPAPI函数
正确使用API函数,特别防止内存泄露。

5.      资源不足
打开报警提醒,当资源不够时提醒设计者

LWIP常见问题1.       网卡驱动程序首先,必须将协议栈完全初始化才能打开网络接收功能,接收中断必须将数据封装在PBUF中,然后交会给协议栈内核处理。其次,LWIP的全局变量(arp_table,netif_list,udp_pcbs等)确保赋初值0,否则容易一运行就崩溃。
2.       内存泄露第一个原则(责任制):谁分配内存,谁就负责回收。
第二个原则(对称性):分配内存者与回收内存者一一对应构成闭环。
另外,需要特别注意一些系统函数的调用,它们也会带来内存泄露,如:
1
newconn = netconn_accept(conn);
do_something_for(newconn);
netconn_close(newconn);
netconn_delete(newconn);   /*一定要释放newconn否则将导致内存泄露 */


2
inbuf = netconn_recv(conn);
do_something_for(inbuf);
netbuf_delete(inbuf);   /*一定要释放inbuf否则将导致内存泄露 */
3.      PC机无法与LWIP建立TCP连接问题:PC机能够与LWIP设备PING操作成功,但是无法建立TCP连接。
原因:通过代码跟踪,发现LWIP发出了SYN+ACK数据包,但是PC机无法接收该握手数据包,该数据包为60字节,小于以太网的最小长度(64字节),而LWIP设备的EMAC没有设置短小数据包填充功能,导致PC机无法接收该短数据包。
解决:使能EMAC的短小数据包填充功能。
继承事业,薪火相传
返回列表