阅读:1107回复:2
再接再厉,再问几个问题。11.在中断处理函数里,设置网卡的中断屏蔽位。 这句话的意思是不是说往硬件上的某个寄存器上写0,告诉硬件不要送中断上来。 而不是禁用掉主机上的中断。 而应该是尽早打开,不然会造成数据丢失。 这句话的意思应该是说在处理发送完成中断或者接收中断的时候,如果禁止掉中断的话,有可能因为再由数据 过来需要中断的时候没有中断,造成这一个数据帧的丢失。是吗? 我看NE2000的例子,它好像为了防止这种情况,在接受了一个数据包后又会去主动询问硬件。 您应该看过DDK的NE2000的例子吧,我感觉它的中断处理程序在那个while语句中就跳不出来了。这是怎么回事,还是我理解错了。 |
|
|
沙发#
发布于:2005-05-20 20:27
对。 对于前面设置硬件上的中断屏蔽寄存器,网卡仍能接收数据,只是不会触发cpu中断了,并会设置中断状态寄存器 这样ne2000在一个中断处理函数里(实际上已经是dpc level了),一直查询中断状态寄存器避免丢失数据包。 代码我还有印象,至于你担心的中断处理程序在while语句中跳不出来,除非接收包的速度大于处理速度,不然把接收的包都处理了,就跳出来了 |
|
板凳#
发布于:2005-05-20 20:16
对 |
|