OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13969|回复: 28

Assertion "pbuf_free: p->ref > 0" failed at line 650 in ..\LWIP\lwip-1.4.1\src\core\pbuf.c

[复制链接]

5

主题

13

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2016-7-18
在线时间
6 小时
发表于 2016-7-19 17:38:57 | 显示全部楼层 |阅读模式
5金钱
Assertion "pbuf_free: p->ref > 0" failed at line 650 in ..\LWIP\lwip-1.4.1\src\core\pbuf.c
这是什么问题lwip里正常运行都没问题,但运行久了,就会跳出这个问题,之后就会导致receive后iou,buf还是=NULL

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2016-7-20 21:21:07 | 显示全部楼层
内存申请和释放的时候,加关闭全局中断保护。试试。
回复

使用道具 举报

5

主题

13

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2016-7-18
在线时间
6 小时
 楼主| 发表于 2016-7-25 10:15:04 | 显示全部楼层
正点原子 发表于 2016-7-20 21:21
内存申请和释放的时候,加关闭全局中断保护。试试。

没什么用,还是会出现这个错误
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2016-7-30 00:01:57 | 显示全部楼层
aslkop 发表于 2016-7-25 10:15
没什么用,还是会出现这个错误

那就不知道了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

16

主题

216

帖子

1

精华

高级会员

Rank: 4

积分
970
金钱
970
注册时间
2016-11-24
在线时间
156 小时
发表于 2017-2-14 09:36:53 | 显示全部楼层
楼主,我也碰到这个问题,之后LWIP就挂掉了,你后面是怎么处理的?
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2016-10-19
在线时间
5 小时
发表于 2017-6-28 18:12:49 | 显示全部楼层
同样遇到了该问题,网络端开了三个端口收发网络数据。运行久了就会报这个错,ARM跑挂
回复

使用道具 举报

58

主题

288

帖子

1

精华

高级会员

Rank: 4

积分
813
金钱
813
注册时间
2012-3-29
在线时间
81 小时
发表于 2017-7-12 23:56:10 | 显示全部楼层
问题找到了吗?我也遇到这个问题了
回复

使用道具 举报

58

主题

288

帖子

1

精华

高级会员

Rank: 4

积分
813
金钱
813
注册时间
2012-3-29
在线时间
81 小时
发表于 2017-7-13 00:33:14 | 显示全部楼层
我遇到的问题和你的问题一样,我的解决了,我的原因是我调用了两次释放内存的函数pbuf_free(p); 第一次释放完了变成NULL了,第二次释放就出问题了
回复

使用道具 举报

4

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2017-7-18
在线时间
29 小时
发表于 2017-7-28 15:12:56 | 显示全部楼层
业未央 发表于 2017-7-13 00:33
我遇到的问题和你的问题一样,我的解决了,我的原因是我调用了两次释放内存的函数pbuf_free(p); 第一次释放 ...

求助,是怎么解决的,我也遇到了这个问题
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2016-10-19
在线时间
5 小时
发表于 2017-8-22 09:27:28 | 显示全部楼层
业未央 发表于 2017-7-13 00:33
我遇到的问题和你的问题一样,我的解决了,我的原因是我调用了两次释放内存的函数pbuf_free(p); 第一次释放 ...

楼主,这个文件是lwip的内核文件的嘛,不是自己写的。那你说的调用了两次释放内存的函数,是怎么回事啊?解答下啊,同样的文件困扰
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2016-10-19
在线时间
5 小时
发表于 2017-8-22 09:35:49 | 显示全部楼层
业未央 发表于 2017-7-13 00:33
我遇到的问题和你的问题一样,我的解决了,我的原因是我调用了两次释放内存的函数pbuf_free(p); 第一次释放 ...

而且pbuf_free()函数里,刚开始就判断了if(p == NULL)如果是NULL就会返回0,怎么还会运行到后面去呢??
回复

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2018-4-2
在线时间
25 小时
发表于 2018-8-1 10:18:09 | 显示全部楼层
问题找到了吗
回复

使用道具 举报

4

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2019-1-9
在线时间
20 小时
发表于 2019-1-19 20:40:11 | 显示全部楼层
业未央 发表于 2017-7-13 00:33
我遇到的问题和你的问题一样,我的解决了,我的原因是我调用了两次释放内存的函数pbuf_free(p); 第一次释放 ...

我也同样的问题,找不到原因啊,能否详细说一下
回复

使用道具 举报

4

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2019-1-9
在线时间
20 小时
发表于 2019-1-29 14:00:10 | 显示全部楼层
如果一次发送的数据包很大,内存释放的时候,PBUF中的数据还没有发送完,就会出问题,无法释放部分PBUF,在PBUF_FREE前面加个延时就可以了,具体延多少可以自己试一下,几个ms够了,看你发的数据量和PBUF内存池的大小
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2019-1-30 22:11:17 | 显示全部楼层
papabbb 发表于 2019-1-29 14:00
如果一次发送的数据包很大,内存释放的时候,PBUF中的数据还没有发送完,就会出问题,无法释放部分PBUF,在 ...

下次试试这个方法
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2015-3-5
在线时间
7 小时
发表于 2019-5-20 09:25:26 | 显示全部楼层
这个问题困扰好久了,同求解决方案
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2019-6-18
在线时间
0 小时
发表于 2019-6-18 16:05:08 | 显示全部楼层
papabbb 发表于 2019-1-29 14:00
如果一次发送的数据包很大,内存释放的时候,PBUF中的数据还没有发送完,就会出问题,无法释放部分PBUF,在 ...

请问有新的方法吗,这个方法治标不治本
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2019-6-18
在线时间
0 小时
发表于 2019-6-18 16:09:01 | 显示全部楼层
你好,问下你什么平台,用rt thread了吗,现在不确定是因为rt thread导致还是lwip问题
回复

使用道具 举报

8

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
452
金钱
452
注册时间
2019-5-20
在线时间
65 小时
发表于 2019-11-14 11:43:05 | 显示全部楼层
大佬解决了吗
回复

使用道具 举报

8

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
452
金钱
452
注册时间
2019-5-20
在线时间
65 小时
发表于 2019-11-14 11:43:59 | 显示全部楼层
Assertion "tcp_recved: len would wrap rcv_wnd
" failed at line 618 in ..\LWIP\lwip-1.4.1\src\core\tcp.c

这个是什么意思,有大佬知道吗,lwip断开时打印的实际没有断开
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2019-12-6
在线时间
1 小时
发表于 2019-12-6 10:10:42 | 显示全部楼层
我在进行LWIP一直时,也遇到了一样的问题,在pbuf.c文件里有警告Assertion "pbuf_free: p->ref > 0" failed。按照在free前加延时的建议,测试了各个不同的延时,没有什么效果,怀疑导致这个问题的原因不止一种。
原来实现系统模拟层里的邮箱函数时,会把消息的内容通过平台的队列函数一起传到队列里去,再从邮箱里取数据时,队列里消息的内容所占的资源没有释放,所以在TCP连接成功后资源很快被占满,造成内存泄露,在free时出现这个警告。
后来将邮箱函数实现为仅传递指向消息内容的指针变量,取消息时也取的是指针变量。修改后在建立TCP后,LWIP能稳定运行,不再报这个警告。
回复

使用道具 举报

259

主题

806

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1887
金钱
1887
注册时间
2012-10-28
在线时间
353 小时
发表于 2020-5-1 11:13:13 | 显示全部楼层
13167581051L 发表于 2019-12-6 10:10
我在进行LWIP一直时,也遇到了一样的问题,在pbuf.c文件里有警告Assertion "pbuf_free: p->ref > 0" failed ...

你好, 你的意思是 修改 sys_arch.c 里面的通讯接口吗 ?
回复

使用道具 举报

22

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
429
金钱
429
注册时间
2016-5-23
在线时间
118 小时
发表于 2020-9-28 17:09:15 | 显示全部楼层
正点原子 发表于 2016-7-20 21:21
内存申请和释放的时候,加关闭全局中断保护。试试。

请问是那个地方加,
内存申请和释放的地方有好几个都加吗?
回复

使用道具 举报

4

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2020-8-25
在线时间
25 小时
发表于 2020-10-8 11:54:13 | 显示全部楼层
13167581051L 发表于 2019-12-6 10:10
我在进行LWIP一直时,也遇到了一样的问题,在pbuf.c文件里有警告Assertion "pbuf_free: p->ref > 0" failed ...

没有使用操作系统,就没有使用邮箱函数,请问大佬有什么方法处理无操作系统出现这个情况吗
回复

使用道具 举报

22

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
429
金钱
429
注册时间
2016-5-23
在线时间
118 小时
发表于 2020-10-9 11:14:32 | 显示全部楼层
papabbb 发表于 2019-1-29 14:00
如果一次发送的数据包很大,内存释放的时候,PBUF中的数据还没有发送完,就会出问题,无法释放部分PBUF,在 ...

带操作系统吗?如果没有操作系统的话程序是顺序执行的,不应该会有你这个问题啊?
回复

使用道具 举报

4

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2020-8-25
在线时间
25 小时
发表于 2020-10-22 10:27:58 | 显示全部楼层
不带操作系统出现这个问题,有大佬解决没,求解决方法
回复

使用道具 举报

4

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2020-8-25
在线时间
25 小时
发表于 2020-10-23 12:04:29 | 显示全部楼层
我的解决了,我的原因也是我调用了两次释放内存的函数pbuf_free(p)
回复

使用道具 举报

6

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2017-4-20
在线时间
11 小时
发表于 2023-7-29 08:28:42 | 显示全部楼层
这个怎么回事?
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2024-2-18
在线时间
3 小时
发表于 2024-2-18 15:32:26 | 显示全部楼层
simple551 发表于 2020-10-23 12:04
我的解决了,我的原因也是我调用了两次释放内存的函数pbuf_free(p)

可以详细说一下改了什么地方吗
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 14:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表