目前共有5篇帖子。 内容转换:不转换▼
 
点击 回复
583 4
发现了AVR uip网卡程序的一个bug
一派护法 十九级
1楼 发表于:2017-5-11 23:02
当笔记本没有插电源的时候插上USB线供电,尽管LED灯已亮,但连接状态一直为未连接。
一派护法 十九级
2楼 发表于:2017-5-11 23:06

【故障2】

ping 192.168.1.50

不通,数码管一直为1, 70

一派护法 十九级
3楼 发表于:2017-5-11 23:07
故障2的现象是没有输出网卡中断。
一派护法 十九级
4楼 发表于:2017-5-11 23:21

这些故障应该都是INT2上的低电平干扰造成的。为了增强抗干扰能力,可以在主循环中每5秒就自动检查一次pkt_cnt=0时中断EIE是否处于关闭状态(也就是判断是否产生了死锁),若判断出产生了死锁,则应及时打开EIE使系统恢复正常。

同时也要检查连接状态改变中断是否是开启的状态,并定时自动更新连接状态,而不是完全依靠中断来通知。

一派护法 十九级
5楼 发表于:2017-5-11 23:43

if (pkt_in)
{
    asm("wdr");
    GICR &= ~_BV(INT2); // 进入临界区之前必须关网卡中断!
    read_packet();
    ENC28J60_SelectBank(1);
    if (!ENC28J60_Read(EPKTCNT)) // 若已接收完全部数据包
    {
        pkt_in = 0;
        ENC28J60_SetBits(EIE, EIE_PKTIE, ENCSET); // 则重开数据包接收中断
    }
    GICR |= _BV(INT2); // 重开网卡中断
}


在上面的代码中,当pkt_in等于0时若中断PKTIE处于关闭状态,就会发生死锁。

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:583 回复数:4
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2017-5-11 23:43
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。