硬汉嵌入式论坛

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

[ThreadX全家桶] ThreadX NetXDUO再提供个nx_system_initialize的卸载函数nx_system_uninitialize就完美了

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2021-12-11 11:15:03 | 显示全部楼层 |阅读模式



网络这块,有个卸载还是还很有必要的,特别是从异常或者崩溃状态恢复,直接复位重新初始化简单粗暴,好用。

QQ截图20211211111452.png
回复

使用道具 举报

3

主题

1258

回帖

1267

积分

至尊会员

积分
1267
发表于 2021-12-11 12:25:44 | 显示全部楼层
是啊,这个API添加后,就更实用了。
回复

使用道具 举报

1

主题

75

回帖

78

积分

初级会员

积分
78
发表于 2021-12-17 15:52:35 | 显示全部楼层
这个初始化函数没有初始化任何实例,因此没必要提供uninitialize函数。实际应用场景中可以参考nx_ip_create和nx_ip_delete。这对接口负责IP实例的初始化和删除。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
 楼主| 发表于 2021-12-17 16:02:16 | 显示全部楼层
catro 发表于 2021-12-17 15:52
这个初始化函数没有初始化任何实例,因此没必要提供uninitialize函数。实际应用场景中可以参考nx_ip_create ...

我现在想更好的应对网线热插拔,有没有好点的推荐思路,就是类似这个帖子的实现方法

【实战经验分享】一劳永逸的解决网线随意热插拔问题
https://www.armbbs.cn/forum.php? ... 5386&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

1

主题

75

回帖

78

积分

初级会员

积分
78
发表于 2021-12-17 18:52:14 | 显示全部楼层
我也没什么好的想法。如果应用程序允许网络断开后删除当前线程重新开始的话,我觉得你贴子里的方法是个不错的解决方案。
一般情况下,应用程序是有责任来选择网络断开后要进行的操作的,简单粗暴的做法是删除当前线程创建的资源然后再创建,这些资源往往是无法通过一个全局的函数来清理的,除非是复位程序。而干净的做法通常是需要具体问题具体应对的。系统中有如下几个线程
1. 线程1直接使用TCP socket进行通信
2. 线程2直接使用TLS进行通信
3. 线程3使用HTTPS进行通信
4. 线程4使用MQTT进行通信
那么当网线断开的时候,不同线程需要清理的资源是不一样的。NetX作为TCP/IP协议层只能获取系统中创建的4个TCP socket。而对于TLS, HTTPS以及MQTT的资源使用无法很好的获取。另外,网络程序除了网线断开的问题,还需要处理连接断开后的连接重新建立。所以用户在设计使用面向连接的程序时,往往已经考虑了这些问题,包括网线断开。

版主如果有好的思路我也向你好好学习
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
 楼主| 发表于 2021-12-17 19:26:05 | 显示全部楼层
catro 发表于 2021-12-17 18:52
我也没什么好的想法。如果应用程序允许网络断开后删除当前线程重新开始的话,我觉得你贴子里的方法是个不错 ...

谢谢分享,我还在摸索
回复

使用道具 举报

2

主题

72

回帖

78

积分

初级会员

积分
78
发表于 2022-4-17 16:57:07 | 显示全部楼层
不知道楼主关于网线插拔这块弄的怎么样了,最近也在研究这块也遇到了一些问题:
回复

使用道具 举报

2

主题

72

回帖

78

积分

初级会员

积分
78
发表于 2022-4-17 17:10:32 | 显示全部楼层
刚才的帖子没写完,重新写一下
不知道楼主关于网线热插拔研究的怎么样了,我最近也在研究这块,也遇到了一些问题:
一般情况下,我发现网线的插拔不影响 NETX 的运行,但是有个有特殊情况,就是如果网线插拔的时候,网口的速率变了,这时候就会有问题,这个时候需要重新初始化硬件。 而经过测试发现,驱动里面的硬件初始化,在调用 nx_ip_create 函数的时候才会执行,所以我在试着,检测到网线拔掉的时候,把IP删掉,但是发现,删掉IP还要先删掉绑定的 TCP 和 UDP 服务。  

那么问题就来了, UDP服务的删除已经搞定了, 但是TCP server 总是删除不成功, 尝试过一下几个函数顺序执行,还是不行
nx_tcp_socket_disconnect
nx_tcp_client_socket_unbind
nx_tcp_socket_delete
到最后一个函数这里,总是返回错误0x42  NX_STILL_BOUND, 不知道该怎么处理了。 这里删不掉,意味着 前面的 IP就删不掉, 那么就没法重新创建 IP了,唉。
回复

使用道具 举报

1

主题

75

回帖

78

积分

初级会员

积分
78
发表于 2022-4-18 09:50:10 | 显示全部楼层
lanse闪电 发表于 2022-4-17 17:10
刚才的帖子没写完,重新写一下
不知道楼主关于网线热插拔研究的怎么样了,我最近也在研究这块,也遇到了一 ...

TCP server用这些函数删除
nx_tcp_socket_disconnect
nx_tcp_server_socket_unaccept
nx_tcp_server_socket_unlisten
nx_tcp_socket_delete
回复

使用道具 举报

2

主题

72

回帖

78

积分

初级会员

积分
78
发表于 2022-4-20 21:50:12 | 显示全部楼层
catro 发表于 2022-4-18 09:50
TCP server用这些函数删除
nx_tcp_socket_disconnect
nx_tcp_server_socket_unaccept

谢谢,用了这些函数确实可以正常删掉Tcp server了,不管之前TCP连接已经连接还是未连接,都可以正常删除了。 之前是少用了一个函数。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-9 18:05 , Processed in 0.330112 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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