《LWIP协议栈》关于LWIP的pcb->next 指向pcb自身,造成死机问题的解决方法

      大家好,我是阿桃,一个想成为被点赞关注的程序员。

 

     工控行业、物联网行业、机器人行业软件开发可联系我

       本人使用的LWIP版本号是LWIP 1.3.2 ,并且使用UCOSII  V2.89系统。

       在移植使用的过程中,使用LWIP只做客户端或服务端是没有问题的。后来客户端和服务端都集合使用的时候,碰到了一个BUG,for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) , 在这个地方进入死循环了,即pcb 块申请和释放的时候出错了,pcb->net指向自己本身了。后来在网上查了一大堆资料,说是LWIP1.3.2版本就有这个问题,而1.4.1版本没有。为了解决这个问题就尝试去移植LWIP1.4.1这个版本,然后却发现1.4.1与1.3.2版本的邮箱和信号量函数接口都不同了,在UCOSII,V2.8.9下已经不能满足了。相当于之前移植的sys_arch.c已经不能适应了。LWIP1.4.1在网上的sys_arch.c例子基本都是基于UCOSIII-V3.0.x 来实现。所有如果更换LWIP1.4.1的话,最好也要去替换UCOSII。而又由于之前的工程中已有使用UCOSII,再去替换工作量又相当大,所有想找到一种方式,直接在LWIP1.3.2版本下解决LWIP的pcb->net指向自己本身的问题。

        后来发现这个问题是由于LWIP里面的TCP块在没有接连的情况下,不用close就会自动释放。如果LWIP自己释放过了,而你自己又操作close或abort释放一次,那么TCP_PCB内存块就出现问题了。那么问题既然找到了,那就想办法解决。本人想到了一个修改最少最简便的方法来解决这个问题,仅需修改2个.c、1个.h文件即可解决这个问题。修改情况如下:

        只需要在,struct tcp_pcb中添加一个字段,再加上几行代码,就可以解决这个问题了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值