OpenEdv-开源电子网

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

enc28j60+lwip的例程有时ping一段时间后延时很大,需要复位才能正常ping

[复制链接]

27

主题

118

帖子

0

精华

高级会员

Rank: 4

积分
845
金钱
845
注册时间
2015-12-8
在线时间
175 小时
发表于 2017-11-29 12:02:57 | 显示全部楼层 |阅读模式
5金钱
enc28j60+lwip的例程有时ping一段时间后延时会变很大,需要重新复位板子后才能正常回复正常的Ping延时,请问是什么原因?在网上找到这个答案http://blog.sina.com.cn/s/blog_a4e2465a0102ws39.html    不知道是不是这个问题?但是我更改之后程序会移植在中断中,不切换任务,请问要怎么更改才能正常?@zuozhongkai @正点原子

最佳答案

查看完整内容[请看2#楼]

在ENC28J60中断处理函数中的接收中断部分改成下面这样就好了[mw_shl_code=c,true]if(status&EIR_PKTIF) //接收到数据,处理数据 { while((packetnum=ENC28J60_Read(EPKTCNT))!=0) { lwip_pkt_handle(); //printf("%d\r\n",packetnum); } ENC28J60_Write_Op(ENC28J60_BIT_FIELD_CLR,EIR,EIR_PKTIF); //清除ENC28J60的接收中断标志位 }[/mw_shl_code]
为自己掌握新的知识感到快乐
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

27

主题

118

帖子

0

精华

高级会员

Rank: 4

积分
845
金钱
845
注册时间
2015-12-8
在线时间
175 小时
 楼主| 发表于 2017-11-29 12:02:58 | 显示全部楼层
正点原子 发表于 2017-11-30 00:51
根据你那个帖子去修改下,看看吧

在ENC28J60中断处理函数中的接收中断部分改成下面这样就好了[mw_shl_code=c,true]if(status&EIR_PKTIF)                //接收到数据,处理数据
        {
               
                while((packetnum=ENC28J60_Read(EPKTCNT))!=0)
                {
                        lwip_pkt_handle();
                        //printf("%d\r\n",packetnum);
                }
                ENC28J60_Write_Op(ENC28J60_BIT_FIELD_CLR,EIR,EIR_PKTIF);        //清除ENC28J60的接收中断标志位
        }[/mw_shl_code]
为自己掌握新的知识感到快乐
回复

使用道具 举报

27

主题

118

帖子

0

精华

高级会员

Rank: 4

积分
845
金钱
845
注册时间
2015-12-8
在线时间
175 小时
 楼主| 发表于 2017-11-29 12:03:58 | 显示全部楼层
使用了UCOSIII操作系统
回复

使用道具 举报

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
11928
金钱
11928
注册时间
2015-11-5
在线时间
2087 小时
发表于 2017-11-29 14:37:15 | 显示全部楼层
如果enc28j60的驱动优化不好,在数据量比较大的网络下很容易出现丢包的,不管有没有OS结果都一样
回复

使用道具 举报

27

主题

118

帖子

0

精华

高级会员

Rank: 4

积分
845
金钱
845
注册时间
2015-12-8
在线时间
175 小时
 楼主| 发表于 2017-11-29 19:56:49 | 显示全部楼层
FreeRTOS 发表于 2017-11-29 14:37
如果enc28j60的驱动优化不好,在数据量比较大的网络下很容易出现丢包的,不管有没有OS结果都一样

ping一段时间之后就会进入接收错误中断,是接收缓冲不足的原因吗?我ping的指令是一个数据包1500字节。
ping 192.168.10.30 -t -l 1500
为自己掌握新的知识感到快乐
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2017-11-30 00:51:22 | 显示全部楼层
根据你那个帖子去修改下,看看吧
回复

使用道具 举报

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
11928
金钱
11928
注册时间
2015-11-5
在线时间
2087 小时
发表于 2017-11-30 17:39:45 | 显示全部楼层
Jundodo 发表于 2017-11-29 19:56
ping一段时间之后就会进入接收错误中断,是接收缓冲不足的原因吗?我ping的指令是一个数据包1500字节。
...

ping包1500字节确实太大了,如果这时候网卡接收了其他数据包,那就极有可能出现丢包
我都是按照windows的ping包内容填充32字节,而且程序必须不断的检查接收错误中断,一发现错误就立刻修正接收的读写指针
下面提供我自己的ping包数据
[mw_shl_code=applescript,true]static const uint8_t pingMsg[32] =
{
    0x61, 0x62, 0x63, 0x64,
    0x65, 0x66, 0x67, 0x68,
    0x69, 0x6A, 0x6B, 0x6C,
    0x6D, 0x6E, 0x6F, 0x70,
    0x71, 0x72, 0x73, 0x74,
    0x75, 0x76, 0x77, 0x61,
    0x62, 0x63, 0x64, 0x65,
    0x66, 0x67, 0x68, 0x69,
};[/mw_shl_code]
拿来长岛冰茶换我半晚安睡
回复

使用道具 举报

3

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2017-9-19
在线时间
34 小时
发表于 2018-1-13 14:52:17 | 显示全部楼层
本帖最后由 steaven 于 2018-1-13 14:55 编辑
Jundodo 发表于 2017-11-29 12:02
在ENC28J60中断处理函数中的接收中断部分改成下面这样就好了[mw_shl_code=c,true]if(status&EIR_PKTIF)                 ...

  牛,我之前这么用就是出问题,改成你这样,测试好一点,现在让它测试1天看看!file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\924401092\QQ\WinTemp\RichOle\3ZL}AOD_X%7CSFFM`75(JOY.png
123.jpg
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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