硬汉嵌入式论坛

 找回密码
 立即注册
查看: 212|回复: 4
收起左侧

[NetX] netx的TCP发送问题,申请数据包发送,理应自动释放,实际上没有

[复制链接]

7

主题

21

回帖

42

积分

新手上路

积分
42
QQ
发表于 2024-4-29 20:55:44 | 显示全部楼层 |阅读模式
首先是现象

大约16个收发后netx崩溃.png
大约16个收发后netx崩溃

我的发送函数包装
回环收发处代码.png
回环测试这里仍然保持安富莱例程的结构,仅仅把发送的包改为另一个包装的自由API

发送函数.png
发送函数长这样,太长不用看。只是按照论坛和手册的说明,依次调用nx_packet_allocate、nx_packet_data_append、nx_tcp_socket_send。
其中我的packet指针sPacket,在调用nx_packet_allocate函数后被设置了一个地址,说明分配成功;调用nx_packet_data_append函数后有了指定的内容;调用nx_tcp_socket_send函数后成功发送,同时指针数值被清零,应该意味着它被释放了。此前我在后面还有释放函数,debug后发现发送时指针即被清除掉了。
但是收发16次后,函数nx_packet_allocate返回了0x01错误,意味着内存池不够用了。实际上我为这个发送函数单独申请了一个内存池,具有20个packet的大小。这真的很奇怪,手册和论坛中其他帖子都说发送packet就是以这个流程进行创建并发送的。
如果这个api调用流程有误,我该怎么发送自由内容的packet包呢?
回复

使用道具 举报

7

主题

21

回帖

42

积分

新手上路

积分
42
QQ
 楼主| 发表于 2024-4-29 20:57:29 | 显示全部楼层
补充一下,崩溃不仅仅是申请packet申请不到,连ping也ping不通了
回复

使用道具 举报

7

主题

21

回帖

42

积分

新手上路

积分
42
QQ
 楼主| 发表于 2024-4-29 21:50:03 | 显示全部楼层
新证据

我在我包装的发送函数末尾检查了一下内存池pool的信息info

    ULONG TOTAL, FREE, EMPTY_REQ, EMPTY_SUS, INV;
    nx_packet_pool_info_get(&pool_0, &TOTAL, &FREE, &EMPTY_REQ, &EMPTY_SUS, &INV);

事实上每次调用nx_packet_allocate申请数据包,free的包都会减1,说明确实正常在内存池中申请了,只是没有正常释放。

但是在debug中追踪到nx_tcp_socket_send函数最终会调用ne_packet_transmit_release,理论上是在发送成功后释放数据包的内存,但是这部分内存为什么没回到内存池,还没有发现问题所在。
释放函数.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107072
QQ
发表于 2024-4-30 09:24:46 | 显示全部楼层
yono 发表于 2024-4-29 21:50
新证据

我在我包装的发送函数末尾检查了一下内存池pool的信息info

1、我原始的测试代码部分,不做任何修改,正常不
2、然后注意这个问题。

终于搞明白ThreadX NetXDUO的TCP Socket数据包申请和释放问题
https://www.armbbs.cn/forum.php? ... 0285&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

7

主题

21

回帖

42

积分

新手上路

积分
42
QQ
 楼主| 发表于 2024-4-30 14:01:23 | 显示全部楼层
eric2013 发表于 2024-4-30 09:24
1、我原始的测试代码部分,不做任何修改,正常不
2、然后注意这个问题。

老哥的测试代码是没问题的。

问题解决.png
最终问题所在是像老哥这个帖子里说的一样,接收包并解析数据后需要释放包。不好意思,是我马虎了。
终于搞明白ThreadX NetXDUO的TCP Socket数据包申请和释放问题 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! (armbbs.cn)
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-16 13:30 , Processed in 0.176234 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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