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处于关闭状态,就会发生死锁。