你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

请教LWIP回调函数编程问题

[复制链接]
wfy680 提问时间:2018-7-12 10:01 /
STM32F429开发板,有个无操作系统移植LWIP的例程。PC机发送一个1000字节长度的包,开发板已经完整接收到(查看tot_len =1000), 但是接收程序仅仅接收了pbuf链表的第一个pbuf数据,只有460字节,而链表后面的pbuf数据没有接收??
static err_t tcp_echoclient_recv(void *arg,struct tcp_pcb *tpcb, struct pbuf *p, err_t err)
{
         char*recdata=0;
         
struct echoclient *es;
err_t ret_err;
  
LWIP_ASSERT("arg != NULL",arg != NULL);
  
  es= (struct echoclient *)arg;
         
  if(p == NULL)  // 远程主机关闭了连接
  {
     es->state = ES_CLOSING;
     if(es->pbuf_tx == NULL)
         tcp_echoclient_connection_close(tpcb, es);
     else
         tcp_echoclient_send(tpcb, es);
     
     ret_err = ERR_OK;
}   
else if(err != ERR_OK)  //接收到数据,但是有错误
  {
     pbuf_free(p);
     ret_err = err;
  }
else if(es->state == ES_CONNECTED)
  {
   tcp_recved(tpcb, p->tot_len); /* 总长度 */
   recdata=(char *)malloc(p->len*sizeof(char));// 仅仅第一个长度分配空间
                   if(recdata!=NULL)
                   {
                            memcpy(recdata,p->payload,p->len);// 仅仅COPY第一个pbuf ??
     #ifdef SERIAL_DEBUG
       if(recdata!=NULL)  printf("\r\n%s",recdata);//
     #endif  
     free(recdata);
                   }
   pbuf_free(p);
   ret_err = ERR_OK;
  }
else  /* data received whenconnection already closed */
  {
   tcp_recved(tpcb, p->tot_len); /* Acknowledge data reception */
   pbuf_free(p);  /* free pbuf and donothing */
   ret_err = ERR_OK;
  }
  return ret_err;
}


收藏 1 评论1 发布时间:2018-7-12 10:01

举报

1个回答
hi201803 回答时间:2018-9-8 16:24:38
学习了, 咱也得注意

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版