OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5438|回复: 6

UCOSii和LWIP出现网络卡死的现象

[复制链接]

4

主题

6

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2016-2-18
在线时间
9 小时
发表于 2018-1-29 20:30:28 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 xiaoo125 于 2018-1-29 20:43 编辑

我用的是STM407,网络部分用的是原子大哥的代码,TCP服务器的历程修改;设备通过交换机和PC机连接,上位机软件每秒查询一次设备状态,设备也会回传一帧数据给上位机。
问题是:拷机24小时左右,网络死掉,截包工具看到的现象是:
1,设备连续回传了两帧数据(间隔50ms),却没有收到ACK,并且WIN窗口的值在不断改变(减小)见图一。
2,软件调试发现代码死在了图二,在这个for循环里出不来。

一直有一帧重传

一直有一帧重传



此图设备IP为192.168.1.60是服务器端,PC机是tcp客户端IP:192.168.1.29.可以看出设备的TCP的窗口一直在减小

在线调试发现程序停在这里

在线调试发现程序停在这里

此图是在线调试停的地方,发现useg->next 一直不为NULL。导致程序停在这个FOR循环出不来;
求大神们给点意见

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-1-30 00:41:59 | 显示全部楼层
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2017-7-6
在线时间
8 小时
发表于 2018-1-30 16:04:05 | 显示全部楼层
这里仅仅讨论一下,首先是关于unacked的一直卡死在循环里的问题,因为TCP 有确认的连接,而且和win窗口有关的,就是那个滑动窗口,这个滑动窗口大小应该是不为1,否则就是顺序接收了。
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2017-7-6
在线时间
8 小时
发表于 2018-1-30 16:06:56 | 显示全部楼层
因为在unacked里不为空,也就说明了,有包没有收到回应,因此未收到 ack 的链表一直不为空,所以一直在等待,win窗口一直减小我感觉是因为一直在接收或者发送数据,但是一直没有收到回应,因此能够接收数据的滑动窗口的大小就一直在减小,导致一定程度以后,无法接收数据,我感觉是这样,欢迎讨论!
回复

使用道具 举报

4

主题

6

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2016-2-18
在线时间
9 小时
 楼主| 发表于 2018-1-30 17:25:30 来自手机 | 显示全部楼层
今天已验证确实是客户端没有给出ack。因为使用的网络环境比较复杂,导致客户端认为自己没有收到,从而没有给出ack。时间长了,底层服务器端的发送buf被写满。unack的链表也没有空的。最终发送的时候发不出去,假死在这里,我调试了一下中断啥都能响应,由于网络优先级高,所以其他任务根本就不执行。现在我需要实现如果长时间收不到ack就要扔掉这一包。该如何实现
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-1-31 01:14:40 | 显示全部楼层
xiaoo125 发表于 2018-1-30 17:25
今天已验证确实是客户端没有给出ack。因为使用的网络环境比较复杂,导致客户端认为自己没有收到,从而没有 ...

发送数据,没收到应答,就得重发。
而接收端,如果收到数据不符合预期,就得丢弃。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

6

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2016-2-18
在线时间
9 小时
 楼主| 发表于 2018-1-31 16:51:05 来自手机 | 显示全部楼层
发现程序中未开启tcp_poll的回调函数。但是打开后发现设备与pc直连工作正常,如果通过交换机就会看到即使我把tcp_poll(newpcb,tcp_server_poll,255);也会马上断掉。可能还是我在应用tcp服务器的时候没有设置好。看了咱的扩展历程里面没有基于tcp服务器的带ucos而且lwip也有的历程。只有基于ucos的lwip的一直。还有就是有人应用过这个工程吗,在复杂的网络环境下。复杂网络环境时tcp_pcb的控制块中polltmr加的特别快,设置pollintval为255。导致客户端刚连接上就会跳进tcp_poll里面es指向为空所以进入tcp_abort
B863AD5B-1A42-4386-937A-79110ABAA44D.jpeg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 21:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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