说明:
网线热插拔是实际项目中经常会遇到的问题,热插拔又有各种各样的情况要具体处理,这里分享一种实用性方案。
热插拔的问题种类:
1、上电前,网线还没有插入,上电后插入如何处理。
2、服务器模式使用时,检测到断开网线了,重新插入如何处理。
3、客户端模式时,检测到网线断开了,重新插入如何处理。
4、长时间断开,比如1个小时以上,重新插入后协议栈无法正常运行如何处理。
5、将网线从一个网络环境切换到另一个网络环境。
这几个问题,如果具体问题都配一个具体的解决方案就太繁琐了。而且逻辑关系不容易捋顺。
解决办法:
这里为大家分享一种解决办法,以新版的RL-TCPnet V7.X为例。
1、有个专门的网络插拔通知函数 ,通过这个函数可以方便的了解网络插拔信息。
2、然后还有个初始化函数netInitialize()和复位初始化函数netUninitialize(),其中这个复位初始化函数尤其好用,在检测到网线被拔掉后,调用此函数会释放所有用户使用的网络资源,并删除以太网接口任务和协议栈内核任务。
3、最后就是用户自己创建的各种应用任务,我们这里在检测到网线拔掉后直接将其删除即可(优先调用网络复位任何后再删),检测到网线插入后重新创建。
具体处理:
网络插拔消息函数,这里直接设置一个全局变量来标识插拔状态。
当然,追求执行效率,也可以采用任务信号量,事件标志等方式,这里没有采用的原因是大家自己移植的时候很容易出现没有创建任务组件就去使用了。
专门开辟一个网络初始化和检测任务来处理插拔问题:
实际测试效果比较满意,这样就不用具体情况具体分析了,直接所有问题全部被处理了。