2622|3

483

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

这下必须要召唤大神了 ----关于LWIP [复制链接]

10芯积分
本帖最后由 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调试的内存结果
在debug的时候我查看的地址是data,出来的时候是第一排的数据,但是根据我标记的红色箭头,前几次的数据都还在。这明显不科学啊?


此帖出自stm32/stm8论坛

最新回复

你可以看下形参p的地址,我认为p不变,除非调用函数也是你或这第三方写的(只要不是lwip写的)。 p不应该在你的函数里面被free掉,p每次应该是重用的。你考虑其它原因导致的硬错误异常。  详情 回复 发表于 2016-7-26 19:38
点赞 关注
 

回复
举报

105

帖子

1

TA的资源

一粒金砂(中级)

沙发
 
free一个空间又不会对该空间全部清零,你要有具体的len来指出当前有效的数据长度。
你可以在free之前对这些空间手动清零看看。
此帖出自stm32/stm8论坛

点评

手动释放应该不行,应该是LWIP分配内存的问题。因为每次分配的内存地址值减少,估计减少到一顶程度就硬件错误了。  详情 回复 发表于 2016-7-26 17:15
 
 

回复

483

帖子

0

TA的资源

纯净的硅(初级)

板凳
 
moyanming2013 发表于 2016-7-26 10:23
free一个空间又不会对该空间全部清零,你要有具体的len来指出当前有效的数据长度。
你可以在free之前对这 ...

手动释放应该不行,应该是LWIP分配内存的问题。因为每次分配的内存地址值减少,估计减少到一顶程度就硬件错误了。
此帖出自stm32/stm8论坛

点评

你可以看下形参p的地址,我认为p不变,除非调用函数也是你或这第三方写的(只要不是lwip写的)。 p不应该在你的函数里面被free掉,p每次应该是重用的。你考虑其它原因导致的硬错误异常。  详情 回复 发表于 2016-7-26 19:38
 
 

回复

105

帖子

1

TA的资源

一粒金砂(中级)

4
 
yl20084784 发表于 2016-7-26 17:15
手动释放应该不行,应该是LWIP分配内存的问题。因为每次分配的内存地址值减少,估计减少到一顶程度就硬件 ...

你可以看下形参p的地址,我认为p不变,除非调用函数也是你或这第三方写的(只要不是lwip写的)。
p不应该在你的函数里面被free掉,p每次应该是重用的。你考虑其它原因导致的硬错误异常。
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表