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

请教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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版