stm32开发之netxduo网口通讯,网线热插拔处理

前言

  1. 在使用netxduo组件时,如果在上电过程中,未插入网线,eth驱动使能过程中未正常初始化
  2. 本次使用以下几种方式进行设置

问题原因

在这里插入图片描述

使用定时器+事件回调方式

网络组件中进行调整

/** Copyright (c) 2024-2024,shchl** SPDX-License-Identifier: Apache-2.0** Change Logs:* Date           Author       Notes* 2024-4-15     shchl   first version*/
#include <nx_ip.h>#include "lan8742.h"
#include "main.h"
#include "nx_stm32_eth_driver.h"
#include "nx_stm32_phy_driver.h"#if 1#define     APP_NX_PACKET_SIZE              1536 /*数据包大小*/
#define     APP_NX_PACKET_POOL_SIZE         ((sizeof(NX_PACKET) + APP_NX_PACKET_SIZE) * 16)#define     APP_NX_IP_STACK_SIZE            2048
#define     APP_NX_IP_PRIORITY              10#define     APP_NX_ARP_CACHE_SIZE           1024#define     APP_NX_IP_ADDR                  IP_ADDRESS(192,168,8,9)
#define     APP_NX_IP_SUB_MASK              IP_ADDRESS(255,255,255,0)/*
*******************************************************************************************************
*                               外部引入变量
*******************************************************************************************************
*//*
*******************************************************************************************************
*                               变量
*******************************************************************************************************
*/void *loc_ip_area;
void *packet_pool_area;
void *arp_cache_area;NX_PACKET_POOL g_packet_pool; /*全局packet pool 池*/
NX_IP g_loc_ip; /*全局 本地ip实例*/
static TX_TIMER nx_link_status_timer;
/*
*********************************************************************************************************
*                                       静态全局变量
*********************************************************************************************************
*//*
*********************************************************************************************************
*                                      函数声明
*********************************************************************************************************
*/
static VOID phy_link_status_change_notify(NX_IP *ip_ptr, UINT i, UINT link_up);static VOID check_phy_link(ULONG id);/*
*********************************************************************************************************
*                                      外部函数
*********************************************************************************************************
*/
int nx_application_define(void) {UINT stat = 0;
#if 1/*内存分配*/static CHAR nx_packet_pool[APP_NX_PACKET_POOL_SIZE];static CHAR nx_arp_cache[APP_NX_ARP_CACHE_SIZE];static CHAR nx_ip_stack[APP_NX_IP_STACK_SIZE];packet_pool_area = nx_packet_pool;loc_ip_area = nx_ip_stack;arp_cache_area = nx_arp_cache;
#elsepacket_pool_area = app_malloc(APP_NX_PACKET_POOL_SIZE);loc_ip_area = app_malloc(APP_NX_IP_STACK_SIZE);arp_cache_area = app_malloc(APP_NX_ARP_CACHE_SIZE);
#endif/*创建packet pool*/stat += nx_packet_pool_create(&g_packet_pool, "NX PACKET POOL",APP_NX_PACKET_SIZE,packet_pool_area, APP_NX_PACKET_POOL_SIZE);stat += nx_ip_create(&g_loc_ip,"NX IP",APP_NX_IP_ADDR,APP_NX_IP_SUB_MASK,&g_packet_pool,nx_stm32_eth_driver,loc_ip_area,APP_NX_IP_STACK_SIZE,APP_NX_IP_PRIORITY);nx_ip_link_status_change_notify_set(&g_loc_ip, phy_link_status_change_notify);/*ip 相关配置*/{/* 启用 ARP 并为 IP 实例  提供 ARP 缓存内存。 */stat += nx_arp_enable(&g_loc_ip, arp_cache_area, APP_NX_ARP_CACHE_SIZE);/* 启用 ICMP */stat += nxd_icmp_enable(&g_loc_ip);/* 为IP 实例启用 TCP 处理.  */stat += nx_tcp_enable(&g_loc_ip);/*禁止分包 */stat += nx_ip_fragment_disable(&g_loc_ip);}if (stat) {LOG_E("app_nx_ip_instance_create error:%d", stat);}tx_timer_create(&nx_link_status_timer, "phy check",check_phy_link, 0, 1000, 5000, TX_AUTO_ACTIVATE);return NX_SUCCESS;
}TX_APP_DEFINE_EXPORT(nx_application_define); /*首先创建模块应用*//*
*********************************************************************************************************
*                                      内部函数
*********************************************************************************************************
*/static VOID check_phy_link(ULONG id) {// ;int32_t status = nx_eth_phy_get_link_state();UINT nx_link_status = g_loc_ip.nx_ip_interface[0].nx_interface_link_up;// 判断if (((nx_link_status == TX_TRUE) && status <= LAN8742_STATUS_LINK_DOWN) ||(nx_link_status == TX_FALSE && status > LAN8742_STATUS_LINK_DOWN)) {g_loc_ip.nx_ip_interface[0].nx_interface_link_status_change = TX_TRUE;_tx_event_flags_set(&g_loc_ip.nx_ip_events,NX_IP_LINK_STATUS_EVENT,TX_OR);}
}/**** @brief  物理链接状态改变通知回调函数* @param ip_ptr* @param i* @param link_up*/
static VOID phy_link_status_change_notify(NX_IP *ip_ptr, UINT i, UINT link_up) {NX_IP_DRIVER driver_request;if (link_up == NX_TRUE) {LOG_D("nx link enable ", link_up);driver_request.nx_ip_driver_ptr = ip_ptr;driver_request.nx_ip_driver_command = NX_LINK_ENABLE;ip_ptr->nx_ip_interface[i].nx_interface_link_driver_entry(&driver_request);} else {// ip_ptr->nx_ip_interface[i].nx_interface_link_up=NX_FALSE;LOG_D("nx link diasble ", link_up);driver_request.nx_ip_driver_ptr = ip_ptr;driver_request.nx_ip_driver_command = NX_LINK_DISABLE;ip_ptr->nx_ip_interface[i].nx_interface_link_driver_entry(&driver_request);}
}#endif

关键部分

在这里插入图片描述

关于这个事件接收部分的代码(设计到的源码重点部分说明)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

禁用部分(调整)

在这里插入图片描述

测试结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/6741.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Initialize failed: invalid dom.

项目场景&#xff1a; 在vue中使用Echarts出现的错误 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 例如&#xff1a;在vue中使用Echarts出现的错误 ERROR Initialize failed: invalid dom.at Module.init (webpack-internal:///./node_modules/echarts…

Delta lake with Java--入门

最近在研究数据湖&#xff0c;虽然不知道研究成果是否可以用于工作&#xff0c;但我相信机会总是留给有准备的人。 数据湖尤其是最近提出的湖仓一体化概念&#xff0c;很少有相关的资料&#xff0c;目前开源的项目就三个&#xff0c;分别是hudi, delta lake, iceberg。最终选择…

算法打卡day41

今日任务&#xff1a; 1&#xff09;198.打家劫舍 2&#xff09;213.打家劫舍II 3&#xff09;337.打家劫舍III 4&#xff09;复习day16 198.打家劫舍 题目链接&#xff1a;198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 你是一个专业的小偷&#xff0c;计划偷窃沿街…

【hive】transform脚本

文档地址&#xff1a;https://cwiki.apache.org/confluence/display/Hive/LanguageManualTransform 一、介绍二、实现1.脚本上传到本地2.脚本上传到hdfs 三、几个需要注意的点1.脚本名不要写全路径2.using后面语句中&#xff0c;带不带"python"的问题3.py脚本Shebang…

LNMP部署wordpress

1.环境准备 总体架构介绍 序号类型名称外网地址内网地址软件02负载均衡服务器lb0110.0.0.5192.168.88.5nginx keepalived03负载均衡服务器lb0210.0.0.6192.168.88.6nginx keepalived04web服务器web0110.0.0.7192.168.88.7nginx05web服务器web0210.0.0.8192.168.88.8nginx06we…

基于Springboot的校园生活服务平台(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的校园生活服务平台&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

shell脚本-监控系统内存和磁盘容量

监控内存和磁盘容量除了可以使用zabbix监控工具来监控&#xff0c;还可以通过编写Shell脚本来监控。 #! /bin/bash #此脚本用于监控内存和磁盘容量&#xff0c;内存小于500MB且磁盘容量小于1000MB时报警#提取根分区剩余空间 disk_size$(df / | awk /\//{print $4})#提取内存剩…

《机器学习算法面试宝典》重磅发布!

我们经常会组织场算法岗技术&面试讨论会&#xff0c;会邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 基于讨论和经验总结&#xff0c;历时半年的梳理和修改&#xff…

eNSP-浮动静态路由配置

ip route-static 192.168.1.0 24 192.168.3.2 preference 60 #设置路由 目标网络地址 和 下一跳地址 preference值越大 优先级越低 一、搭建拓扑结构 二、主机配置 pc1 pc2 三、配置路由器 1.AR1路由器配置 <Huawei>sys #进入系统视图 [Huawei]int g0/0/0 #进入接…

详解面向对象-类和对象

1.面向对象与面向过程的区别 ①面向过程 &#xff1a;关注点是在实现功能的步骤上面&#xff0c;就是分析出解决问题所需要的步骤&#xff0c;让后函数把这些步骤一步一步实现&#xff0c;使用的时候一个一个依次调用就可以。对于简单的流程是适合面向过程的方式进行的&#x…

C++:set和map的介绍

目录 关联式容器 键值对 set介绍&#xff1a; set的模板参数列表 set的双向迭代器&#xff1a; insert的使用和set的特性&#xff1a; set的删除&#xff1a; set的find&#xff1a; lower_bound 、 upper_bound&#xff1a; multiset&#xff1a; map介绍&#xff…

解决windows中的WSL Ubuntu子系统忘记root密码和用户密码问题

1、以管理员身份运行PowerShell 2、在powershell中执行wsl.exe --user root wsl.exe --user root如果出现了上面的报错&#xff0c;则需要运行步骤3、4&#xff0c;然后在执行步骤5改密码&#xff0c;如果没有出错&#xff0c;请直接跳到第5步改密码操作&#xff01;&#xff…

第11章 软件工程

这里写目录标题 1.软件过程1.1能力成熟度模型(CMM)1.2能力成熟度模型集成(CMMI)1.3瀑布模型(线性顺序)1.4增量模型1.5演化模型1.5.1原型模型1.5.2螺旋模型 1.6喷泉模型1.7统一过程(UP)模型 2.敏捷方法3.系统设计4.系统测试4.1单元测试(模块测试)4.2集成测试4.3黑盒测试(功能测试…

HNU-人工智能-实验1-A*算法

人工智能-实验1 计科210x 甘晴void 一、实验目的 掌握有信息搜索策略的算法思想&#xff1b; 能够编程实现搜索算法&#xff1b; 应用A*搜索算法求解罗马尼亚问题。 二、实验平台 课程实训平台https://www.educoder.net/shixuns/vgmzcukh/challenges 三、实验内容 3.…

如何将数据导入python

Python导入数据的三种方式&#xff1a; 1、通过标准的Python库导入CSV文件 Python提供了一个标准的类库CSV文件。这个类库中的reader()函数用来导入CSV文件。当CSV文件被读入后&#xff0c;可以利用这些数据生成一个NumPy数组&#xff0c;用来训练算法模型。 from csv import…

详细介绍如何使用YOLOv9 在医疗数据集上进行实例分割-含源码+数据集下载

深度学习彻底改变了医学图像分析。通过识别医学图像中的复杂模式,它可以帮助我们解释有关生物系统的重要见解。因此,如果您希望利用深度学习进行医疗诊断,本文可以成为在医疗数据集上微调YOLOv9 实例分割的良好起点。 实例分割模型不是简单地将区域分类为属于特定细胞类型,…

基于Springboot的校园竞赛管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的校园竞赛管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

stl容器 string类的基本操作

目录 一.string类的构造 二.string类的输出 1.传统字符串输出 2.通过迭代器进行输出 ​编辑 3.C11标准的范围for输出加auto推导类型 三.string类的各种迭代器 begin(&#xff09;和end() 利用迭代器遍历输出 利用迭代器修改字符串的字符 rbgin()和rend() 利用迭代器遍…

创造价值与回报:创业者的思维格局与商业智慧

在纷繁复杂的商业世界中&#xff0c;有一种信念始终贯穿于无数创业者的心中——那就是创造价值。张磊的这句“只要不断地创造价值&#xff0c;迟早会有回报”道出了创业者的核心思维格局和商业智慧。本文将从创业者的角度&#xff0c;探讨创造价值的重要性&#xff0c;以及如何…

5.Spring Security-web权限方案

设置登录的用户名和密码 1.通过配置文件设置用户名密码 spring:security:user:name: xiankejinpassword: 123456 如果没有以上配置&#xff0c;那么就会在后台生成一个随机密码&#xff0c;用户名固定位user。 2.通过配置类设置用户名密码 Configuration public class Sec…