目前共有5篇帖子。 內容轉換:不轉換▼
 
點擊 回復
750 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)
 

本帖信息

點擊數:750 回複數:4
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2017-5-11 23:43
 
©2010-2024 Arslanbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。