搜索
bottom↓
回复: 19

长时间ping lwip会崩掉

[复制链接]

出0入0汤圆

发表于 2010-7-27 12:35:59 | 显示全部楼层 |阅读模式
通过ping  -t 192.168.0.30      ("192.168.0.30 "为目标机地址)

dm9000 rx: status 4001 len 64

dm9000 rx: status 4001 len 64

dm9000 rx: status 4001 len 96

dm9000 rx: status 4001 len 96

dm9000 rx: status 4001 len 64

dm9000 rx: status 4001 len 96

dm9000 rx: status 0001 len 78

dm9000 tx: 74
dm9000 tx: first packet
dm9000 tx done
dm9000 rx: status 4001 len 96


时间长就死掉了
dm9000中断也进不去了
finsh>>dm9000()

NCR   (0x00): 08
NSR   (0x01): 4e
TCR   (0x02): 00
TSRI  (0x03): 00
TSRII (0x04): 00
RCR   (0x05): 31
RSR   (0x06): 40
ORCR  (0x07): 80
CRR   (0x2C): 19
CSCR  (0x31): 00
RCSSR (0x32): 00
ISR   (0xFE): 0f
IMR   (0xFF): af

        1, 0x00000001
finsh>>

cpu是stm32f103zet6



实在解决不了  把协议栈杀掉该怎么做?因为里面有创建任务 和 mbox 之类的,删不干净的话 怕内存泄漏 整个系统崩溃。

期待高手解答,谢谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2010-7-27 14:09:00 | 显示全部楼层
中断进不了,把中断线引出来看看是否有触发。

另外就是你的硬件平台,驱动情况,需要你自行检查下。STM32 Radio在我这边测试可以达到7、8个小时连续播放。

出0入0汤圆

 楼主| 发表于 2010-7-27 15:44:51 | 显示全部楼层
回复【1楼】ffxz
-----------------------------------------------------------------------


有触发的。
原先的驱动 没有检查连接状态,网线连续插拔 几次(不确定)  就连不上了。ping不通


我想假如 重启动 lwip协议栈 可以吗?

出0入0汤圆

发表于 2010-7-27 15:57:02 | 显示全部楼层
有触发中断应该能够进入。驱动中应该是要加入PHY中断处理的,可以自行加入,这样就可以检测网线拔插的情况。

重启lwip不太现实。

出0入0汤圆

 楼主| 发表于 2010-7-27 16:24:46 | 显示全部楼层
恩,我已经加了 phy 中断处理。 不过还是很感谢, 我要把 lwip 好好看一下。 检查以下网络崩掉的具体原因。

出0入0汤圆

发表于 2010-7-27 16:27:20 | 显示全部楼层
回复【4楼】wellda  
恩,我已经加了 phy 中断处理。 不过还是很感谢, 我要把 lwip 好好看一下。 检查以下网络崩掉的具体原因。
-----------------------------------------------------------------------

从以往的经验来看,通常这个并不是lwip的原因,建议好好看看驱动的代码,还有硬件(最好拿示波器量量)。

出0入0汤圆

发表于 2010-7-27 17:51:25 | 显示全部楼层
这两天测试radio板网络(radio 20100720新固件 加载 udpecho)的结果
网络一旦当掉(dm9000a中断输出持续为高)
手工复位DM9000的ISR(添加一个finsh函数),可以恢复网络。
将EXTI4中断服务函数改为
void EXTI4_IRQHandler(void)
{
#ifdef RT_USING_LWIP
        extern void rt_dm9000_isr(void);

        /* Clear the EXTI4 line pending bit */
        EXTI_ClearITPendingBit(EXTI_Line4);

        /* enter interrupt */
        rt_interrupt_enter();

        while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4))
        {
                rt_dm9000_isr();
        }
       
        /* leave interrupt */
        rt_interrupt_leave();
#endif
}
经测试比较长一段时间,暂时没有当掉
请ffxz老大再看看

出0入0汤圆

发表于 2010-7-27 18:16:31 | 显示全部楼层
加了这个?
while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4))

是的,这个确实得加,因为DM9000AE外设是和STM32F103ZE之间是异步的,加这个会比较保险些。

BTW: 加这个后是否就不需要执行finsh下的手动复位了?

出0入0汤圆

发表于 2010-7-27 18:18:45 | 显示全部楼层
回复【6楼】fengzi2003  枫孜
这两天测试radio板网络(radio 20100720新固件 加载 udpecho)的结果
网络一旦当掉(dm9000a中断输出持续为高)
手工复位dm9000的isr(添加一个finsh函数),可以恢复网络。
将exti4中断服务函数改为
void exti4_irqhandler(void)
{
#ifdef rt_using_lwip
        extern void rt_dm9000_isr(void);
        /* clear the exti4 line pending bit */
        exti_clearitpendingbit(exti_line4);
        /* enter interrupt */
        rt_interrupt_enter();
        while(gpio_readinputdatabit(gpioe,gpio_pin_4))
        {
                rt_dm9000_isr();
......
-----------------------------------------------------------------------

枫孜,这个while(gpio_readinputdatabit(gpioe,gpio_pin_4))你直接提交到svn上吧,你有权限的。

出0入0汤圆

发表于 2010-7-27 20:03:59 | 显示全部楼层
关注

出0入0汤圆

发表于 2010-7-27 21:02:31 | 显示全部楼层
回复【7楼】ffxz  
加了这个?
while(gpio_readinputdatabit(gpioe,gpio_pin_4))
是的,这个确实得加,因为dm9000ae外设是和stm32f103ze之间是异步的,加这个会比较保险些。
btw: 加这个后是否就不需要执行finsh下的手动复位了?
-----------------------------------------------------------------------

rt_dm9000_isr();中有清寄存器ISR操作

出0入0汤圆

 楼主| 发表于 2010-7-27 21:42:02 | 显示全部楼层
我明天试试  顺便哪位 长时间 ping -t  测试一下 过程中可以 不定期拔掉网线 再插上去  看看有没有问题

出0入0汤圆

发表于 2010-7-28 06:55:00 | 显示全部楼层
我这边用radio的板子加网络例程试了下ping -t
从昨晚上十点开始ping的,中间不定期拔掉网线,拔网线后pc端会提示hardward error,重新插上网线后ping又正常了。
到现在为止没发现有异常,还在继续,准备再ping它一天看看。

出0入0汤圆

发表于 2010-7-28 19:20:55 | 显示全部楼层
等待shaolin的结果。

出0入0汤圆

发表于 2010-7-28 23:18:54 | 显示全部楼层
SVN代码昨天已经提交(R814),忘记添加信息说明了:(

今天测试了8个小时
*两个1024bytes ping
*加载udpecho,每5ms发送415bytes
*不定期拔插网线约十几次
*加载udpclient,不定期发包,每次8000个,每包间隔10ms
网络依然存活
(ps: UDP例程是直接加载到radio固件运行的,radio未进行任何操作)


另shaolin的测试是按照加“while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4))”之后测试的吗?

出0入0汤圆

发表于 2010-7-29 00:26:24 | 显示全部楼层
我现在是直接用的stm32 radio网络例程,还没有加while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4))
到现在为止还在运行,没有发现异常。算下来,有三十多小时了吧。

出0入0汤圆

 楼主| 发表于 2010-7-29 11:06:54 | 显示全部楼层
多谢各位,就像ffxz所述,是驱动问题,改为stm32 radio 版本就可以了


if (dm9000_device.mode == DM9000_AUTO)
    {
        while (!(phy_read(1) & 0x20))
        {
            /* autonegation complete bit */
            rt_thread_delay( RT_TICK_PER_SECOND/2 );
            i++;
            if (i > 20)
            {
                rt_kprintf("could not establish link\n");
                return 0;
            }
        }
    }

“return 0;”改为 “ return -RT_ERROR;”  比较好    因为有可能一个机器 一开始没插网线或没启动,可能会错过初始化网络的机会。

出0入0汤圆

发表于 2013-10-12 13:18:54 | 显示全部楼层
关注了。

出0入0汤圆

发表于 2014-1-27 23:37:05 | 显示全部楼层
wellda 发表于 2010-7-29 11:06
多谢各位,就像ffxz所述,是驱动问题,改为stm32 radio 版本就可以了

楼主,您好,请问您现在的系统跑的稳定吗,除了ping,发TCP连接会死机吗?
我用s3c2440+dm9000+ucos也是经常死机,我看上面讨论说是硬件驱动程序问题,
请问能把DM9000驱动源码我参考下么,lvyecc@gmail.com,谢谢。

出0入0汤圆

发表于 2014-3-26 08:54:52 来自手机 | 显示全部楼层
加入linK change中断,根据LinK状态重新初始化网卡就好
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-25 19:55

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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