中级会员
 
- 积分
- 226
- 金钱
- 226
- 注册时间
- 2013-9-27
- 在线时间
- 26 小时
|
发表于 2015-9-1 20:31:17
|
显示全部楼层
我之前也发现过这个问题,按照原子的例程,数据只能存在第一个payload指向的数据区,所以这里需要你在程序中将所需要发送的数据放到payload中。这是我之前改过的程序(不规范勿喷)
不过按照如下改过之后,最多只能发送1400多个字节数据,具体多少记不清楚了,就是楼上说的一次最大发送字节数,但不到1500。
void udp_senddata(void *PData, uint16_t totlen)
{
struct pbuf *ptr, *ptmp;
char *Ptemp;
uint16_t Currlen=0,remlen=0;
ptr=pbuf_alloc(PBUF_TRANSPORT,totlen,PBUF_POOL); //申请内存
Ptemp=PData;
remlen=totlen;
ptmp=ptr;
if(ptr)
{
while(remlen>0)
{
ptmp->payload=(uint8_t *)&Ptemp[Currlen]; //(void*)不能进行算法操作,因此加一临时变量替换
Currlen=Currlen+ptmp->len;
remlen=totlen-Currlen;
if(remlen!=0)
{
ptmp=ptmp->next;
}
else
{
ptmp->next=NULL;
}
}
udp_send(UDPPCB,ptr);
pbuf_free(ptr);
}
} |
|