这下必须要召唤大神了 ----关于LWIP

2019-03-23 18:05发布

本帖最后由 yl20084784 于 2016-7-23 19:18 编辑

硬件:stm32+DP83848
问题:搭建LWIP(回调函数版本)好网页服务器后,用浏览器打开网页。这一步正常。但是多打开几次后就进入stm32就硬件错误了。调试发现,在我的http处理函数里面观察接收到的P buff数据一直存在,因此怀疑,是P buff溢出导致进入硬件错误的。但是在HTTP处理函数里面加入了        pbuf_free(p);  语句。
附上我的HTTP处理函数大概结构
static err_t My_http_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
{
  hs = arg;
  char *data;
  if (err == ERR_OK && p != NULL)
  {
    /* Inform TCP that we have taken the data. */
    tcp_recved(pcb, p->tot_len);
    data = p->payload;
       if((strncmp(data,"GET",3)==0))
       {
         unsigned char *Pyl;
         if(strstr(data,"Cf_1")!= NULL)//强制触发1
         {
                pbuf_free(p);//P buff 释放函数
                tcp_write(pcb,http_html_hdr,sizeof(http_html_hdr),0);
                send_data(pcb, hs);
                tcp_sent(pcb, http_sent);               
         }
else
      {
        close_conn(pcb, hs);
      }
}
    else
    {
      pbuf_free(p);
    }
  if (err == ERR_OK && p == NULL)
  {
    close_conn(pcb, hs);
  }
  return ERR_OK;
}
再附上DEBUG调试的内存结果 LWIP Pbuff释放不了?.png
在debug的时候我查看的地址是data,出来的时候是第一排的数据,但是根据我标记的红 {MOD}箭头,前几次的数据都还在。这明显不科学啊?


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。