导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→硬件:老古,现在我要发送7个字节的UDP数据报,按照你的意思[xuyishark]

 *第3594篇: 硬件:老古,现在我要发送7个字节的UDP数据报,按照你的意思做了,但是...请帮忙!

  
楼 主:xuyishark 2002年6月6日10:15
 硬件:老古,现在我要发送7个字节的UDP数据报,按照你的意思做了,但是...请帮忙!
老古,现在我要发送7个字节的UDP数据报,按照你的意思做了,就是把第八个字节置为0.然后
再计算校验和,可是我的计算机收不到数据,可是8019发送指示灯却指示数据已发送..但是我
发送偶数个字节没有一点问题.我想问几个问题:
 1.udplength是否为7?
 2.假如我这个数据报全部长度为51或者101字节,我把8019发送字节数寄存器的值相应的置 
为60或者120.这样会对接收有影响吗?
 3.我的计算UDP校验和是这样的,是否正确,望赐教!
    uint  createudpcrc1(uint length) reentrant
{
 uchar i;
  long int lsum;
  unsigned int r,r1;
  unsigned int crc1;

  crctemp.dword=0;
  lsum = 0l;
  for (i=0;i<(8+length);i++) 
    lsum = lsum+(long int)(txdnet.ippacket.ippacket[6+i]);
  r = (unsigned int)(lsum & 0xFFFF);
  r1 = (unsigned int)((lsum -r)>>16);
  crc1 = ~(r+r1);    
  crc1 -= ((txdnet.ippacket.ippacket[4] & 0x00FF)+txdnet.udpframe.udplength);
  return crc1;
  } 
  其中参数LENGTH 为要发送UDP数据的字数.如为8字节.length=4. 为7.length=7;
  谢谢!

  
2楼:yyp 2002年6月6日10:49
 发送的字节若为7,则UDP总长度应为15=7+8(首部:8个字节)。同时在计算UDP校验和时还要包括伪首部。
  
3楼:蓝天 2002年6月6日13:06
 answer:
2.应该有影响。特别是当缓冲区的数据不为零时,会导致网卡在计算CRC时与正确的数据报
不一致。
3、校验和的算法是可以编成在TCP/IP协议中通用的程序。因为还有TCP、IP等协议中都会用
到。你的算法好象没什么问题,不过我没试。但是,校验和的算法的程序其实可以做得再简
单一点和通用。
  
4楼:xuyishark 2002年6月6日14:28
 那么你在整个数据包长度小于60字节的时候你是填充0,使其长度达到60字节?网卡在计算CRC时是怎么计算的,包括那些内容。
那么你在整个数据包长度小于60字节的时候你是填充0,使其长度达到60字节?网卡在计算
CRC时是怎么计算的,包括那些内容?
  我现在的情况是这样的,在发送偶数个UDP数据时,我把发送数据设置为大于实际需要发
送的字节数时,用pc接受没问题,但是发送奇数个时就有问题。望赐教!
  
5楼:蓝天 2002年6月6日14:36
 ANSWER:
1、整个数据包长度小于60字节的时候最好是填充0,使其长度达到60字节后,再write 
remote DMA到网卡的发送缓冲区。再启动发送命令。
2、RTL8019AS的CRC是计算整个以太帧的(除FCS校验位)。而填充0对CRC计算的结果FCS是
没有影响的。
  
6楼:xuyishark 2002年6月6日14:32
 大虾请跟贴!

>>>>>>对该主题发表你的看法

本主题贴数6,分页: [第1页]


[上一篇主题]:闲聊:风紧!扯浮!

[下一篇主题]:初学者:请教protel99