作者共发了5篇帖子。
字体大小:较小 - 100% (默认)  内容转换:不转换
 
点击 回复
1503 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)
本帖信息
点击数:1503 回复数:4
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2017-5-11 23:43
本吧热门帖子
本吧精品帖子
公告板