新手上路
- 积分
- 21
- 金钱
- 21
- 注册时间
- 2013-3-14
- 在线时间
- 52 小时
|

楼主 |
发表于 2013-12-31 10:36:30
|
显示全部楼层
我修改成如下了,还是不能发送1000个。呜呜呜:
// you can send a max of 220 bytes of data
void make_udp_send(unsigned int srcport, unsigned int dstport, char* data, unsigned int datalen)
{
unsigned int i = 0;
unsigned int ck;
//u8 err;
//make_eth(buf);
if((stateSend==0)||(stateStop==0))return;
//if(stateSend==0)return;
while (i < 6)
{
sendbuf[ETH_DST_MAC + i] = mac_dstaddr;
sendbuf[ETH_SRC_MAC + i] = mac_addr;
i++;
}
i=0;
if (datalen > 1200)
{
datalen = 1200;
}
// total length field in the IP header must be set:
sendbuf[IP_TOTLEN_H_P] = (datalen + IP_HEADER_LEN + UDP_HEADER_LEN)/65536;
sendbuf[IP_TOTLEN_L_P] = (datalen + IP_HEADER_LEN + UDP_HEADER_LEN)%65536;
//make_dstip(buf);
sendbuf[12] = 0x08;
sendbuf[13] = 0x00;
sendbuf[14] = 0x45;
sendbuf[15] = 0x00;
sendbuf[20] = 0x00;
sendbuf[21] = 0x00;
sendbuf[22] = 0x40;
sendbuf[23] = 0x11;
i = 0;
while (i < 4)
{
sendbuf[IP_DST_P + i] = dstip;
sendbuf[IP_SRC_P + i] = myip;
i++;
}
i = 0;
fill_ip_hdr_checksum(sendbuf);
sendbuf[UDP_SRC_PORT_H_P] = srcport >> 8;
sendbuf[UDP_SRC_PORT_L_P] = srcport & 0xff;
sendbuf[UDP_DST_PORT_H_P] = dstport >> 8;
sendbuf[UDP_DST_PORT_L_P] = dstport & 0xff;
// source port does not matter and is what the sender used.
// calculte the udp length:
sendbuf[UDP_LEN_H_P] = (datalen+UDP_HEADER_LEN)/65536;
sendbuf[UDP_LEN_L_P] = (datalen+UDP_HEADER_LEN)%65536;
// zero the checksum
sendbuf[UDP_CHECKSUM_H_P] = 0;
sendbuf[UDP_CHECKSUM_L_P] = 0;
// copy the data:
while (i < datalen)
{
sendbuf[UDP_DATA_P + i] = data;
i++;
}
ck = checksum(&sendbuf[IP_SRC_P], 16 + datalen, 1);
sendbuf[UDP_CHECKSUM_H_P] = ck >> 8;
sendbuf[UDP_CHECKSUM_L_P] = ck & 0xff;
// OSMutexPend(Mutex_TEST, 0, &err); // 等待信号量
enc28j60PacketSend(datalen+UDP_HEADER_LEN + IP_HEADER_LEN + ETH_HEADER_LEN,sendbuf);
//OSMutexPost(Mutex_TEST); // 释放信号量
} |
|