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處於關閉狀態,就會發生死鎖。