当前位置: 首页 > news >正文

PHY——LAN8720A 代码解析 (三)

文章目录

  • PHY——LAN8720A 代码解析 (三)
    • PHY 源码解析
      • ETH_PHY_IO_Init
      • ETH_PHY_IO_DeInit
      • ETH_PHY_IO_WriteReg
      • ETH_PHY_IO_ReadReg
      • ETH_PHY_IO_GetTick
    • LAN8720 源码解析
      • LAN8720_RegisterBusIO
      • LAN8720_Init
      • LAN8720_DisablePowerDownMode
      • LAN8720_EnablePowerDownMode

PHY——LAN8720A 代码解析 (三)

PHY 源码解析

这里 PHY 的操作是通过函数指针实现的。

PHY 结构体定义如下:

typedef int32_t  (*lan8720_Init_Func) (void); 
typedef int32_t  (*lan8720_DeInit_Func) (void);
typedef int32_t  (*lan8720_ReadReg_Func)   (uint32_t, uint32_t, uint32_t *);
typedef int32_t  (*lan8720_WriteReg_Func)  (uint32_t, uint32_t, uint32_t);
typedef int32_t  (*lan8720_GetTick_Func)  (void);typedef struct 
{                   lan8720_Init_Func      Init; lan8720_DeInit_Func    DeInit;lan8720_WriteReg_Func  WriteReg;lan8720_ReadReg_Func   ReadReg; lan8720_GetTick_Func   GetTick;   
} lan8720_IOCtx_t;  typedef struct 
{uint32_t            DevAddr;uint32_t            Is_Initialized;lan8720_IOCtx_t     IO;void               *pData;
}lan8720_Object_t;
  • lan8720_IOCtx_t 结构体实现 PHY 操作的方法
  • lan8720_Object_t 结构体是 PHY 操作的对象

PHY 操作方法的实现

int32_t ETH_PHY_IO_Init(void);
int32_t ETH_PHY_IO_DeInit (void);
int32_t ETH_PHY_IO_ReadReg(uint32_t DevAddr, uint32_t RegAddr, uint32_t *pRegVal);
int32_t ETH_PHY_IO_WriteReg(uint32_t DevAddr, uint32_t RegAddr, uint32_t RegVal);
int32_t ETH_PHY_IO_GetTick(void);lan8720_Object_t LAN8720;
lan8720_IOCtx_t  LAN8720_IOCtx = {ETH_PHY_IO_Init,ETH_PHY_IO_DeInit,ETH_PHY_IO_WriteReg,ETH_PHY_IO_ReadReg,ETH_PHY_IO_GetTick};

ETH_PHY_IO_Init

ETH_PHY_IO_Init 函数用于初始化 PHY 接口。这里主要用于初始化 MDIO 的时钟。

int32_t ETH_PHY_IO_Init(void)
{/* We assume that MDIO GPIO configuration is already donein the ETH_MspInit() else it should be done here*//* Configure the MDIO Clock */HAL_ETH_SetMDIOClockRange(&heth);return 0;
}

ETH_PHY_IO_DeInit

ETH_PHY_IO_DeInit 函数用于反初始化 PHY 接口。这里暂未实现。

ETH_PHY_IO_WriteReg

ETH_PHY_IO_WriteReg 函数用于向 PHY 写入寄存器。这里其实就是封装了 HAL_ETH_WritePHYRegister 函数,并对返回值进行判断。

int32_t ETH_PHY_IO_WriteReg(uint32_t DevAddr, uint32_t RegAddr, uint32_t RegVal)
{if(HAL_ETH_WritePHYRegister(&heth, DevAddr, RegAddr, RegVal) != HAL_OK){return -1;}return 0;
}

ETH_PHY_IO_ReadReg

ETH_PHY_IO_ReadReg 函数用于从 PHY 读取寄存器。这里其实也是封装了 ETH_PHY_IO_ReadReg 函数,并对返回值进行判断。

int32_t ETH_PHY_IO_ReadReg(uint32_t DevAddr, uint32_t RegAddr, uint32_t *pRegVal)
{if(HAL_ETH_ReadPHYRegister(&heth, DevAddr, RegAddr, pRegVal) != HAL_OK){return -1;}return 0;
}

ETH_PHY_IO_GetTick

ETH_PHY_IO_GetTick 函数用于获取当前的 tick 值。对 HAL_GetTick 进行了封装。

int32_t ETH_PHY_IO_GetTick(void)
{return HAL_GetTick();
}

最终将函数指针赋值给 LAN8720_IOCtx 这个变量

LAN8720 源码解析

LAN8720 的接口其实就是调用 PHY 的一系列接口来控制 LAN8720,或者获取 LAN8720 的状态。

LAN8720_RegisterBusIO

LAN8720_RegisterBusIO 函数用于注册 PHY 接口。这里主要是对 lan8720_Object_t 结构体中的 IO 成员进行赋值。

int32_t  LAN8720_RegisterBusIO(lan8720_Object_t *pObj, lan8720_IOCtx_t *ioctx)
{if(!pObj || !ioctx->ReadReg || !ioctx->WriteReg || !ioctx->GetTick){return LAN8720_STATUS_ERROR;}pObj->IO.Init = ioctx->Init;pObj->IO.DeInit = ioctx->DeInit;pObj->IO.ReadReg = ioctx->ReadReg;pObj->IO.WriteReg = ioctx->WriteReg;pObj->IO.GetTick = ioctx->GetTick;return LAN8720_STATUS_OK;
}

函数调用

  /* Set PHY IO functions */LAN8720_RegisterBusIO(&LAN8720, &LAN8720_IOCtx);/* Initialize the LAN8742 ETH PHY */if(LAN8720_Init(&LAN8720) != LAN8720_STATUS_OK){printf("init lan8720 error\r\n");while(1);}

这样 LAN8720 这个变量的结构体成员就被赋值了。操作 PHY 的使用调用 LAN8720 对应的函数指针即可。

LAN8720_Init

这个函数其实就是从 0 遍历 PHY 的地址,找到一个可用的 PHY 地址。

int32_t LAN8720_Init(lan8720_Object_t *pObj)
{uint32_t regvalue = 0, addr = 0;int32_t status = LAN8720_STATUS_OK;if(pObj->Is_Initialized == 0){if(pObj->IO.Init != 0){/* GPIO and Clocks initialization */pObj->IO.Init();}/* for later check */pObj->DevAddr = LAN8720_MAX_DEV_ADDR + 1;/* Get the device address from special mode register */for(addr = 0; addr <= LAN8720_MAX_DEV_ADDR; addr ++){if(pObj->IO.ReadReg(addr, LAN8720_SMR, &regvalue) < 0){status = LAN8720_STATUS_READ_ERROR;/* Can't read from this device addresscontinue with next address */continue;}if((regvalue & LAN8720_SMR_PHY_ADDR) == addr){pObj->DevAddr = addr;status = LAN8720_STATUS_OK;break;}}if(pObj->DevAddr > LAN8720_MAX_DEV_ADDR){status = LAN8720_STATUS_ADDRESS_ERROR;}/* if device address is matched */if(status == LAN8720_STATUS_OK){pObj->Is_Initialized = 1;}}return status;}

这个函数主要是读取 LAN8720_SMR 寄存器,并获取 PHY 的地址

  • LAN8720_SMR 寄存器偏移是 0x12
  • bit4:0 是 PHY 的地址。

LAN8720_DisablePowerDownMode

这个函数用于禁用 PHY 的 Power Down 模式。

int32_t LAN8720_DisablePowerDownMode(lan8720_Object_t *pObj)
{uint32_t readval = 0;int32_t status = LAN8720_STATUS_OK;if(pObj->IO.ReadReg(pObj->DevAddr, LAN8720_BCR, &readval) >= 0){readval &= ~LAN8720_BCR_POWER_DOWN;/* Apply configuration */if(pObj->IO.WriteReg(pObj->DevAddr, LAN8720_BCR, readval) < 0){status =  LAN8720_STATUS_WRITE_ERROR;}}else{status = LAN8720_STATUS_READ_ERROR;}return status;
}

这个函数其实就是实现 读-改-写

  • 读 LAN8720_BCR 寄存器,也就是偏移地址是 0
  • 将 bit11 清零,也就是禁用 Power Down 即 normal operation 模式
  • 写入 LAN8720_BCR 寄存器

LAN8720_EnablePowerDownMode

这个函数用于启用 PHY 的 Power Down 模式。

int32_t LAN8720_EnablePowerDownMode(lan8720_Object_t *pObj)
{uint32_t readval = 0;int32_t status = LAN8720_STATUS_OK;if(pObj->IO.ReadReg(pObj->DevAddr, LAN8720_BCR, &readval) >= 0){readval |= LAN8720_BCR_POWER_DOWN;/* Apply configuration */if(pObj->IO.WriteReg(pObj->DevAddr, LAN8720_BCR, readval) < 0){status =  LAN8720_STATUS_WRITE_ERROR;}}else{status = LAN8720_STATUS_READ_ERROR;}return status;
}

这个函数其实就是实现 读-改-写

  • 读 LAN8720_BCR 寄存器,也就是偏移地址是 0
  • 将 bit11 设置为 1,也就是 General power down mode 模式
  • 写入 LAN8720_BCR 寄存器

其他函数类似,这里就不一一解析了。

相关文章:

PHY——LAN8720A 代码解析 (三)

文章目录 PHY——LAN8720A 代码解析 (三)PHY 源码解析ETH_PHY_IO_InitETH_PHY_IO_DeInitETH_PHY_IO_WriteRegETH_PHY_IO_ReadRegETH_PHY_IO_GetTick LAN8720 源码解析LAN8720_RegisterBusIOLAN8720_InitLAN8720_DisablePowerDownModeLAN8720_EnablePowerDownMode PHY——LAN872…...

【工具】BioPred一个用于精准医疗中生物标志物分析的 R 软件包

介绍 R 语言包 BioPred 提供了一系列用于精准医疗中的亚组分析和生物标志物分析的工具。它借助极端梯度提升&#xff08;XGBoost&#xff09;算法&#xff0c;并结合倾向得分加权和 A 学习方法&#xff0c;帮助优化个体化治疗规则&#xff0c;从而简化亚组识别过程。BioPred 还…...

如何修复 SQL Server 数据库中的恢复挂起状态?

原文&#xff1a;如何修复 SQL Server 数据库中的恢复挂起状态&#xff1f; | w3cschool笔记 当我们想与关系数据库交互时&#xff0c;SQL 就会出现并帮助用户与数据库进行交互。SQL 从高级语言中获取用户的输入&#xff0c;然后访问将代码转换为机器可理解的形式。SQL 确实会…...

C++11QT复习 (十)

基类与派生类之间的转换 **Day7-4 基类与派生类之间的转换****一、问题回顾****二、基类与派生类间的转换****1. 类型适应&#xff08;Upcasting&#xff09;****2. 逆向转换&#xff08;Downcasting&#xff09;** **三、代码示例****四、派生类间的复制控制****五、总结****1…...

Linux——冯 • 诺依曼体系结构操作系统初识

目录 1. 冯 • 诺依曼体系结构 1.1 冯•诺依曼体系结构推导 1.2 内存提高冯•诺依曼体系结构效率的方法 1.3 理解数据流动 2. 初步认识操作系统 2.1 操作系统的概念 2.2 设计OS的目的 3. 操作系统的管理精髓 1. 冯 • 诺依曼体系结构 1.1 冯•诺依曼体系结构推导 计算…...

JVM 学习计划表(2025 版)

JVM 学习计划表&#xff08;2025 版&#xff09; &#x1f4da; 基础阶段&#xff08;2 周&#xff09; 1. JVM 核心概念 ​JVM 作用与体系结构 理解 JVM 在 Java 跨平台运行中的核心作用&#xff0c;掌握类加载子系统、运行时数据区、执行引擎的交互流程​内存结构与数据存…...

arm_mat_init_f32用法 dsp库

arm_mat_init_f32 是 CMSIS DSP 库中的一个函数&#xff0c;用于初始化一个浮点矩阵结构体。以下是其使用方法&#xff1a; 函数原型 c复制 void arm_mat_init_f32(arm_matrix_instance_f32 * S,uint16_t nRows,uint16_t nColumns,float32_t * pData ); 参数说明 S&#xf…...

【蓝桥杯14天冲刺课题单】Day3

1. 题目链接&#xff1a;1025 答疑 贪心类型的题目做法很简单&#xff0c;只需要保证局部解最优即可保证整体解最优。 这里的思路就是第i个学生前面的人答疑所用的时间最短&#xff0c;那么他所发送短信的时间节点越小。这道题目有个需要注意的点是&#xff1a;要先将前i-1个…...

基于开源AI大模型与S2B2C模式的线下服务型门店增长策略研究——以AI智能名片与小程序源码技术为核心

摘要 在传统零售行业中&#xff0c;商品零售可通过无限流量实现销量增长&#xff0c;但服务型门店&#xff08;如餐饮、医疗、美容等&#xff09;因受限于地理位置、服务承载能力及非标化服务特性&#xff0c;需从“流量驱动”转向“复购驱动”增长模式。本研究以“开源AI大…...

批量修改图像命名

打开存放图片的文件 ctrA全选 找到功能栏上的三个点的位置&#xff0c;点击选择复制路径 打开一个Excel表格 将复制的图片路径复制到Excel表格中 选中刚复制的图片路径&#xff0c;点击选择数据->分列->分列 在打开的窗口中选中分隔符号&#xff0c;在点击下一步 选中…...

linux-- 0. C语言过、Java半静对、Python纯动和C++对+C

学习目标&#xff1a; java,CPYTHONC 学习内容&#xff1a; java,CPYTHONC 目录 学习目标&#xff1a; 学习内容&#xff1a; java 纯解释型语言&#xff08;如 Python&#xff09;的对比‌ C语言与Java的核心区别 java,C PYTHON C 学习时间&#xff1a; 学习产出…...

程序化广告行业(50/89):Cookie映射技术深度剖析

程序化广告行业&#xff08;50/89&#xff09;&#xff1a;Cookie映射技术深度剖析 大家好&#xff01;一直以来&#xff0c;我都希望能和大家一起深入探索程序化广告行业&#xff0c;共同学习进步。在之前的分享中&#xff0c;我们已经了解了程序化广告的很多关键内容&#x…...

大语言模型智体的综述:方法论、应用和挑战(下)

25年3月来自北京大学、UIC、广东大亚湾大学、中科院计算机网络信息中心、新加坡南阳理工、UCLA、西雅图华盛顿大学、北京外经贸大学、乔治亚理工和腾讯优图的论文“Large Language Model Agent: A Survey on Methodology, Applications and Challenges”。 智体时代已经到来&a…...

【操作系统】Linux进程管理和调试

在 Linux 中&#xff0c;可以通过以下方法查看 PID&#xff08;进程ID&#xff09;对应的进程名称和详细信息&#xff1a; 1. 使用 ps 命令&#xff08;最直接&#xff09; ps -p <PID> -o pid,comm,cmd示例&#xff1a; ps -p 1234 -o pid,comm,cmd输出&#xff1a; P…...

C++---RAII模式

一、RAII模式概述 1. 定义 RAII&#xff08;Resource Acquisition Is Initialization&#xff09;即资源获取即初始化&#xff0c;是C中用于管理资源生命周期的一种重要编程模式。其核心在于将资源的获取和释放操作与对象的生命周期紧密绑定。当对象被创建时&#xff0c;资源…...

Clion刷题攻略-配置Cmake

使用Clion刷题&#xff0c;在一个项目中创建多个main函数&#xff0c;每一个文件对应一道题目&#xff0c;将Clion作为题目管理系统使用&#xff0c;并且cpp文件允许使用中文名&#xff0c;exe文件统一输出到runtime目录&#xff0c;防止污染根目录&#xff0c;CmakeLists文件如…...

DEBUG:file命令

file 命令详解 file 是 Linux/Unix 系统中用于检测文件类型的实用工具。它通过检查文件的**魔数&#xff08;magic number&#xff09;**和内容结构来判断文件类型&#xff0c;而不是依赖文件扩展名。 1. 基本语法 file [选项] 文件名... 常用选项 选项说明-b (--brief)简洁…...

hackmyvn-casino

arp-scan -l nmap -sS -v 192.168.255.205 目录扫描 dirsearch -u http://192.168.255.205/ -e * gobuster dir -u http://192.168.255.205 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php -b 301,401,403,404 80端口 随便注册一个账号 玩游戏时的…...

Elasticsearch笔记

官网 https://www.elastic.co/docs 简介 Elasticsearch 是一个分布式、开源的搜索引擎&#xff0c;专门用于处理大规模的数据搜索和分析。它基于 Apache Lucene 构建&#xff0c;具有实时搜索、分布式计算和高可扩展性&#xff0c;广泛用于 全文检索、日志分析、监控数据分析…...

在Windows下使用Docker部署Nacos注册中心(基于MySQL容器)

需要两个容器Nacos容器和MySQL容器&#xff0c;MySQL容器专注数据存储&#xff0c;Nacos容器专注服务发现/配置管理 准备工作 确保已安装Docker Desktop for Windows确保已启用WSL 2(推荐)或Hyper-V确保Docker服务正在运行 部署步骤 1. 拉取所需镜像 # 拉取MySQL镜像(这里…...

去中心化自治组织(DAO):革新未来治理的下一站

去中心化自治组织(DAO):革新未来治理的下一站 引言 去中心化自治组织(DAO)的诞生,像是互联网时代的一道新曙光。它打破了传统组织的等级壁垒,以去中心化和智能合约为核心,让社区成员能够直接参与决策并共享收益。从NFT社区到投资基金,DAO的应用场景正以前所未有的速…...

ideal自动生成类图的方法

在 IntelliJ IDEA 中&#xff0c;“**在项目资源管理器中选择以下类**” 是指通过 **项目资源管理器&#xff08;Project Tool Window&#xff09;** 找到并选中你需要生成类图的类文件&#xff08;如 .java 文件&#xff09;&#xff0c;然后通过右键菜单或快捷键操作生成类图…...

爬虫获取1688关键字搜索接口的实战指南

在当今电商行业竞争激烈的环境下&#xff0c;数据的重要性不言而喻。1688作为国内领先的B2B电商平台&#xff0c;拥有海量的商品信息&#xff0c;这些数据对于商家的市场分析、选品决策、价格策略制定等都有着重要的价值。本文将详细介绍如何通过爬虫技术获取1688关键字搜索接口…...

视频设备轨迹回放平台EasyCVR渡口码头智能监控系统方案,确保港口安全稳定运行

一、背景 近年来&#xff0c;随着水上交通运输业的快速发展&#xff0c;辖区内渡口码头数量持续增加&#xff0c;船舶运营规模不断扩大&#xff0c;各类船舶活动频繁&#xff0c;给水上交通安全监管带来了巨大挑战。近期发生的多起村民使用无证木船捕鱼导致的伤亡事故&#xf…...

使用 Sales_data 类实现交易合并(三十)

1. Sales_data 类定义 假设 Sales_data 类定义在头文件 Sales_data.h 中&#xff0c;其基本定义如下&#xff1a; // Sales_data.h #ifndef SALES_DATA_H #define SALES_DATA_H#include <string>struct Sales_data {std::string bookNo; // ISBN 编号unsigned uni…...

电力系统惯量及其作用解析

电力系统中的惯量是指由同步发电机的旋转质量提供的惯性&#xff0c;用于抵抗系统频率变化的能力。其核心作用及要点如下&#xff1a; 1. 物理基础 转动惯量&#xff1a;同步发电机的转子具有质量&#xff0c;其转动惯量&#xff08;&#xff09;决定了转子抵抗转速变化的能力…...

HNSW(Hierarchical Navigable Small World,分层可导航小世界)用来高效搜索高维向量的最近邻

HNSW&#xff08;Hierarchical Navigable Small World&#xff0c;分层可导航小世界&#xff09;是一种用于 高效最近邻搜索&#xff08;ANN, Approximate Nearest Neighbors&#xff09; 的索引结构&#xff0c;专门用于在 高维向量&#xff08;比如文本、图像、音频的嵌入向量…...

STM32 CAN学习(一)

CAN总线应用最多的是汽车领域。 CAN&#xff08;Controller Area Network&#xff09;控制器 局域 网 局域网&#xff1a;把几台电脑连接到一台路由器上&#xff0c;这几台电脑就可以进行通讯了。 控制器在汽车中的专业术语叫做ECU&#xff08;Electronic Control Unit&…...

高效内存位操作:如何用C++实现数据块交换的性能飞跃?

「性能优化就像考古&#xff0c;每一层都有惊喜」—— 某匿名C工程师 文章目录 问题场景&#xff1a;当内存操作成为性能瓶颈性能深潜&#xff1a;揭开内存操作的面纱内存访问的三重代价原始方案的性能缺陷 性能突破&#xff1a;从编译器视角重构代码方案一&#xff1a;指针魔法…...

Spring Boot向Vue发送消息通过WebSocket实现通信

后端实现步骤 添加Spring Boot WebSocket依赖配置WebSocket端点和消息代理创建控制器&#xff0c;使用SimpMessagingTemplate发送消息 前端实现步骤 安装sockjs-client和stompjs库封装WebSocket连接工具类在Vue组件中建立连接&#xff0c;订阅主题 详细实现步骤 后端&…...

USB转串口数据抓包--Bus hound

Bus Hound是一款强大的总线分析工具。 Bus Hound 支持哪些设备 ? 所有的 IDE &#xff0c; SCSI &#xff0c; USB 和 1394 设备都得到支持&#xff0c;包括磁盘驱动器&#xff0c;鼠 标、扫描仪&#xff0c;网络摄像头&#xff0c;等等。只要是枚举成以上所列的总线类型的…...

Android 使用CameraX实现预览、拍照、录制视频(Java版)

Android 官方关于相机的介绍如下&#xff1a; https://developer.android.google.cn/media/camera/get-started-with-camera?hlzh_cn 一、开始使用 Android 相机 Android相机一般包含前置摄像头和后置摄像头&#xff0c;使用相机可以开发一系列激动人心的应用&#xff0c;例…...

【已解决】Javascript setMonth跨月问题;2025-03-31 setMonth后变成 2025-05-01

文章目录 bug重现解决方法&#xff1a;用第三方插件来实现&#xff08;不推荐原生代码来实现&#xff09;。项目中用的有dayjs。若要自己实现&#xff0c;参考 AI给出方案&#xff1a; bug重现 今天&#xff08;2025-04-01&#xff09;遇到的一个问题。原代码逻辑大概是这样的…...

DeepSeek技术架构解析:MLA多头潜在注意力

一、前言 我们上一篇已经讲了 DeepSeek技术架构解析&#xff1a;MoE混合专家模型 这一篇我们来说一说DeepSeek的创新之一&#xff1a;MLA多头潜在注意力。 MLA主要通过优化KV-cache来减少显存占用&#xff0c;从而提升推理性能。我们知道这个结论之前&#xff0c;老周带大家…...

02.02、返回倒数第 k 个节点

02.02、[简单] 返回倒数第 k 个节点 1、题目描述 实现一种算法&#xff0c;找出单向链表中倒数第 k 个节点。返回该节点的值。 2、题解思路 本题的关键在于使用双指针法&#xff0c;通过两个指针&#xff08;fast 和 slow&#xff09;&#xff0c;让 fast 指针比 slow 指针…...

剑指Offer(数据结构与算法面试题精讲)C++版——day2

剑指Offer(数据结构与算法面试题精讲)C++版——day2 题目一:只出现一次的数据题目二:单词长度的最大乘积题目三:排序数组中的两个数字之和题目一:只出现一次的数据 一种很简单的思路是,使用数组存储出现过的元素,比如如果0出现过,那么arr[0]=1,但是有个问题,题目中没…...

nginx的自动跳转https

mkdir /usr/local/nginx/certs/ 创建一个目录 然后用openssl生成证书 编辑nginx的配置文件 自动跳转成功 做一个优化&#xff0c;如果访问的时候后面加了其他的uri也一起自动跳转了...

正则表达式(Regular Expression,简称 Regex)

一、5w2h&#xff08;七问法&#xff09;分析正则表达式 是的&#xff0c;5W2H 完全可以应用于研究 正则表达式&#xff08;Regular Expressions&#xff09;。通过回答 5W2H 的七个问题&#xff0c;我们可以全面理解正则表达式的定义、用途、使用方法、适用场景等&#xff0c…...

Windows下在IntelliJ IDEA 使用 Git 拉取、提交脚本出现换行符问题

文章目录 背景问题拉取代码时提交代码时 问题原因解决方案1.全局配置 Git 的换行符处理策略2.在 IntelliJ IDEA 中配置换行符3.使用 .gitattributes 文件 背景 在 Windows 系统下使用 IntelliJ IDEA 进行 Git 操作&#xff08;如拉取和提交脚本&#xff09;时&#xff0c;经常…...

Python 实现的运筹优化系统代码详解(整数规划问题)

一、引言 在数学建模的广袤领域里&#xff0c;整数规划问题占据着极为重要的地位。它广泛应用于工业生产、资源分配、项目管理等诸多实际场景&#xff0c;旨在寻求在一系列约束条件下&#xff0c;使目标函数达到最优&#xff08;最大或最小&#xff09;且决策变量取整数值的解决…...

conda安装python 遇到 pip is configured with locations that require TLS/SSL问题本质解决方案

以前写了一篇文章&#xff0c;不过不是专门为了解决这个问题的&#xff0c;但是不能访问pip install 不能安装来自https 协议的包问题几乎每次都出现&#xff0c;之前解决方案只是治标不治本 https://blog.csdn.net/wangsenling/article/details/130194456​​​​​​​https…...

嘿嘿,好久不见

2025年4月2日&#xff0c;6~22℃&#xff0c;一般 遇见的事&#xff1a;参加了曲靖的事业单位D类考试。 感受到的情绪&#xff1a;考场一半的人都没有到位&#xff0c;这路上你到了可能都会受到眷顾。 反思&#xff1a;这路上很难&#xff0c;总有人会提前放弃&#xff0c;不…...

virsh 的工作原理

virsh是用于管理虚拟化环境中的客户机和Hypervisor的命令行工具。它基于libvirt管理API构建&#xff0c;与virt-manager等工具类似&#xff0c;都是通过调用libvirt API来实现虚拟化的管理。virsh是完全在命令行文本模式下运行的用户态工具&#xff0c;因此它是系统管理员通过脚…...

Qt实现HTTP GET/POST/PUT/DELETE请求

引言 在现代应用程序开发中&#xff0c;HTTP请求是与服务器交互的核心方式。Qt作为跨平台的C框架&#xff0c;提供了强大的网络模块&#xff08;QNetworkAccessManager&#xff09;&#xff0c;支持GET、POST、PUT、DELETE等HTTP方法。本文将手把手教你如何用Qt实现这些请求&a…...

(041)05-01-自考数据结构(20331)树与二叉树大题总结

实际考试中,计算题约占40%,推理题约占30%,算法设计题约占30%。建议重点练习遍历序列相关的递归分治解法, 知识拓扑 知识点介绍 一、计算题类型与解法 1. 结点数量计算 题型示例: 已知一棵完全二叉树的第6层有8个叶子结点,求该二叉树最多有多少个结点? 解法步骤: 完…...

WPS JS宏编程教程(从基础到进阶)-- 第三部分:JS宏编程语言开发基础

第三部分:JS宏编程语言开发基础 @[TOC](第三部分:JS宏编程语言开发基础)**第三部分:JS宏编程语言开发基础**1. 变量与数据类型**变量声明:三种方式****示例代码****数据类型判断****实战:动态处理单元格类型**2. 运算符全解析**算术运算符****易错点:字符串拼接 vs 数值相…...

迈向云原生:理想汽车 OLAP 引擎变革之路

在如今数据驱动的时代&#xff0c;高效的分析引擎对企业至关重要。理想汽车作为智能电动汽车的领军企业&#xff0c;面临着海量数据分析的挑战。本文将展开介绍理想汽车 OLAP 引擎从存算一体向云原生架构演进的变革历程&#xff0c;以及在此过程中面临的挑战&#xff0c;以及是…...

Spark,HDFS客户端操作

hadoop客户端环境准备 找到资料包路径下的Windows依赖文件夹&#xff0c;拷贝hadoop-3.1.0到非中文路径&#xff08;比如d:\hadoop-3.1.0&#xff09; ① 打开环境变量 ② 在下方系统变量中新建HADOOP_HOME环境变量,值就是保存hadoop的目录。 效果如下&#xff1a; ③ 配置Path…...

QuecPython 的 VScode 环境搭建和使用教程

为方便开发者使用 VSCode 开发 QuecPython&#xff0c;QuecPython 团队特推出了名为 QuecPython 的 VSCode 插件。 插件目前支持的功能有&#xff1a; 固件烧录REPL 命令交互代码补全文件传输文件系统目录树运行指定脚本文件 目前支持所有QUecPython系列模组。 插件安装 点…...

Linux Vim 编辑器的使用

Vim 编辑器的使用 一、安装及介绍二、基础操作三、高级功能四、配置与插件 一、安装及介绍 Vim是一款强大且高度可定制的文本编辑器&#xff0c;相当于 Windows 中的记事本。具备命令、插入、底行等多种模式。它可通过简单的键盘命令实现高效的文本编辑、查找替换、分屏操作等…...