楼主,我使用UDP接收数据,想每次接收1024B的数据,但发现接收到的数据有问题,请帮忙看看是怎么回事。谢了。。
void UDP_Receive(void *arg, struct udp_pcb *upcb, struct pbuf *p, struct ip_addr *addr, u16_t port)
{
unsigned char *temp;
temp=p->payload; if(p != NULL) // 如果收到的数据不为空 { memcpy(UDP_data_temp,temp,1024); //将接收到的数据拷贝到用户区 /* while(uDMAChannelIsEnabled(UDMA_SEC_CHANNEL_EPI0TX)==0) { uDMAChannelEnable(UDMA_SEC_CHANNEL_EPI0TX); // 重新使能EPI0 TX通道 }
*/ p->payload=UDP_data_temp; udp_sendto(upcb,p,&ipaddr,port); pbuf_free(p); // 释放缓冲区数据 }
}
然后看有网友说LWIP是分段接收的,所以又改成了
void UDP_Receive(void *arg, struct udp_pcb *upcb, struct pbuf *p, struct ip_addr *addr, u16_t port) { struct ip_addr destAddr = *addr; unsigned int bufLen=0; temp=p->payload; if(p != NULL) // 如果收到的数据不为空 { for(p=p; p!=NULL; p=p->next) { memcpy(&UDP_data_temp[bufLen], p->payload, p->len); bufLen += p->len; }
/*
if(bufLen>1023) { while(uDMAChannelIsEnabled(UDMA_SEC_CHANNEL_EPI0TX)==0) { uDMAChannelEnable(UDMA_SEC_CHANNEL_EPI0TX); // 重新使能EPI0 TX通道 } }
*/
p->payload=UDP_data_temp; udp_sendto(upcb,p,&ipaddr,port);
pbuf_free(p); // 释放缓冲区数据 } }
接收到的数据还是不对 |