2。send_packet函数里面有这样的语句:
for(i=0;i <6;i++){ //最多重发6次
for(ii=0;ii <1000;ii++) //检查txp为是否为低
if((reg00&0x04)==0) break;
if((reg04&0x01)!=0) break; //表示发送成功
reg00=0x3E;
}
为什么检查txp为是否为低需要循环1000次呢?reg00能记录那么多的数据(1000个)吗?事实上,只要最后一个发送的数据发送完了(即TXP位为1),则最终reg00仍可表示整个1000个数据都发送完了,这就没有意义了。
另外,reg00=0x3E;是表示发送数据到网上,那“重发6次”指的是重发到网上还是重发到网卡RAM里面呢?如果是指重发到网上,
前面也没有reg00=0x3E;语句啊(这个循环之后才有),只有reg00=0x12; 语句,
如何重发啊?
还有,sourcenodeid[],destnodeid[]好象没有通过DMA端口写入网卡RAM里面啊,这在启动发送命令时是如何把数据发送出去的呢?
3。bit recv_packet(union netcard *rxdnet)函数里面有这样的语句:
if(curr==0) return 0; //读的过程出错
判断curr==0就可以知道“读的过程出错”吗?这是从那里知道的?我查了一下RTL8019的资料手册,好象没有提到这些。这是规定的吗?我想确认一下。
bnry=rxdnet-> bytes.bytebuf[1]-1; //next page start-1
这里下一页指针的含义是什么,是相对谁而言的(当前读,还是当前写),为什么要减1呢?
谢谢各位大虾赐教!