OpenEdv-开源电子网

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

使用W5500时遇到Socket连接或数据超时后程序就没有反应了?

[复制链接]

35

主题

181

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1115
金钱
1115
注册时间
2016-8-1
在线时间
235 小时
发表于 2018-5-28 09:22:41 | 显示全部楼层 |阅读模式
1金钱
S3(Z7Z5Z7DN(@T[F}9]@KAK.png 使用W5500时遇到Socket连接或数据超时后程序就没有反应了,main函数的while循环也不执行了,不知道程序死在哪里了,但是定时器里的程序都是在正常执行的。我记得之前还是自动联网的

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

使用道具 举报

35

主题

181

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1115
金钱
1115
注册时间
2016-8-1
在线时间
235 小时
 楼主| 发表于 2018-5-28 11:06:41 | 显示全部楼层
本帖最后由 rindy 于 2018-5-28 11:07 编辑

知道死在哪里了,死在了这个函数
问题描述:/*********************************************

* 函数名  : Detect_Gateway

* 描述    : 检查网关服务器

* 输入    : 无

* 输出    : 无

* 返回值  : 成功返回TRUE(0xFF),失败返回FALSE(0×00)

* 说明    : 无

******************************************************/

unsigned char Detect_Gateway(void)

{

unsigned char ip_adde[4];

ip_adde[0]=IP_Addr[0]+1;

ip_adde[1]=IP_Addr[1]+1;

ip_adde[2]=IP_Addr[2]+1;

ip_adde[3]=IP_Addr[3]+1;



//检查网关及获取网关的物理地址

Write_W5500_SOCK_4Byte(0,Sn_DIPR,ip_adde);//向目的地址寄存器写入与本机IP不同的IP值

Write_W5500_SOCK_1Byte(0,Sn_MR,MR_TCP);//设置socket为TCP模式

Write_W5500_SOCK_1Byte(0,Sn_CR,OPEN);//打开Socket

os_dly_wait (100);//Delay(5);//延时5ms

if(Read_W5500_SOCK_1Byte(0,Sn_SR) != SOCK_INIT)//如果socket打开失败

{

Write_W5500_SOCK_1Byte(0,Sn_CR,CLOSE);//打开不成功,关闭Socket

return FALSE;//返回FALSE(0×00)

}



Write_W5500_SOCK_1Byte(0,Sn_CR,CONNECT);//设置Socket为Connect模式



do

{

u8 j=0;

j=Read_W5500_SOCK_1Byte(0,Sn_IR);//读取Socket0中断标志寄存器

if(j!=0)

Write_W5500_SOCK_1Byte(0,Sn_IR,j);

os_dly_wait (10);//Delay(5);//延时5ms

if((j&IR_TIMEOUT) == IR_TIMEOUT)

{

return FALSE;

}

else if(Read_W5500_SOCK_1Byte(0,Sn_DHAR) != 0xff)

{

Write_W5500_SOCK_1Byte(0,Sn_CR,CLOSE);//关闭Socket

return TRUE;

}

}
while(1);//跳不出循环了

}

直接连接电脑的时候死在了这个函数里。Read_W5500_SOCK_1Byte(0,Sn_DHAR) 的返回值一直是ff

网上的答1:无法获取目标MAC地址。应该是W5500发出ARP请求,没有收到对应的回复。

你的交换机各个口之间是透明的吗?如果是的话,用PC连在一个port上,用Wireshark抓包看一下。你也可以把抓包附上来看一下。

网上的答2:问题找到了。用交叉网线就可以了
回复

使用道具 举报

35

主题

181

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1115
金钱
1115
注册时间
2016-8-1
在线时间
235 小时
 楼主| 发表于 2018-5-28 11:16:29 | 显示全部楼层
rindy 发表于 2018-5-28 11:06
知道死在哪里了,死在了这个函数
问题描述:/*********************************************

谁能再分析一下这个是什么原因导致的?,因为上面这个问题也不是每次都产生,偶尔会一直卡死,确实是网线的问题吗?
回复

使用道具 举报

32

主题

171

帖子

0

精华

高级会员

Rank: 4

积分
697
金钱
697
注册时间
2017-1-7
在线时间
75 小时
发表于 2018-5-28 13:31:57 | 显示全部楼层
看你的条件语句,一直循环肯定是进入死循环的那个原因了!
回复

使用道具 举报

35

主题

181

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1115
金钱
1115
注册时间
2016-8-1
在线时间
235 小时
 楼主| 发表于 2018-5-29 08:28:09 | 显示全部楼层
Jevin乐动 发表于 2018-5-28 13:31
看你的条件语句,一直循环肯定是进入死循环的那个原因了!

这个是通用的例程,都是这么写的,照理里面的条件肯定是能跳出循环的,但是不知道什么原因引起了里面跳不出了。
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-8-27
在线时间
4 小时
发表于 2018-9-1 11:43:12 | 显示全部楼层
如果5500问题没有解决,可以来找我们深圳炜世科技,提供专业的技术支持。 电话0755-86568556  邮箱support@wisioe.com
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 06:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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