【MT32F006】MT32F006之通信协议
本文最后修改时间:2025年01月09日
一、本节简介
本文介绍如何使用MT32F006写一个通信协议。
二、实验平台
库版本:V1.0.0
编译软件:MDK5.37
硬件平台:MT32F006开发板(主芯片MT32F006)
仿真器:JLINK
三、版权声明
1)作者:甜甜的大香瓜
2)声明:喝水不忘挖井人,转载请注明出处。
3)纠错/业务合作:897503845@qq.com
4)香瓜嵌入式之STM8/STM32群:164311667
5)本文出处:原创连载资料《简单粗暴学MT32F006》
6)完整开源资料下载地址(电脑端打开):opengua.taobao.com
四、实验前提
1、在进行本文步骤前,请先阅读以下章节:
1)《简单粗暴学MT32F006》的“第一章和第二章”章节。
暂无
2、在进行本文步骤前,请先实现以下章节:
1)《简单粗暴学MT32F006》的《MT32F006之串口》。
五、基础知识
1、通信协议是什么?
答:
通信协议是通信双方的通信规范,有被广泛使用如Modbus协议。
本文使用香瓜项目中最常用的一套自定义通信协议。
2、为什么要通信协议?
答:
如果通信双方没有制定通信协议,会导致香瓜发送一个0x38数据给另一台设备时,另一台设备不清楚这个数据是表示电机转动、还是温度值、还是电量值、又或是在骂人……
因此通信过程中的数据含义需要在开发之前定义下来,也就是要定义通信协议。
3、本文使用的通信协议是如何的?
答:
简单来说,就是通信过程采取最少4字节为一包的通信数据包
六、硬件原理
暂无
七、实验步骤
1、编写并添加驱动
1)编写驱动GUA_Communication.c
(存放在“……\Projects\MT006_StdPeriph_Templates\GUA”)
//********************************************************************** //name: GUA_Communication.c //introduce: 香瓜的通信协议 //author: 甜甜的大香瓜 //email: 897503845@qq.com //QQ group: 香瓜单片机之STM8/STM32(164311667) //shop: opengua.taobao.com //changetime: 2024.12.6 //********************************************************************** #include "GUA_Communication.h" #include "GUA_UART.h" #include <string.h> /*********************宏定义************************/ //功能码 #define GUA_CHECK_ELECTRIC_CHARGING 0x00 //读电量和电流状态 #define GUA_READ_CHARGE_CURRENT 0x02 //读电流 #define GUA_SET_RTC_TIME 0x03 //修改rtc时间 #define GUA_READ_VERSION 0x04 //读版本号 #define GUA_READ_RTC 0x05 //读RTC时间 #define GUA_SET_PI_POWER_ON_TIME 0x06 //设置供电给树莓派的启动时间 #define GUA_READ_PI_POWER_ON_TIME 0x07 //读供电给树莓派的启动时间 #define GUA_CHECK_PI_ONLINE 0x08 //08检测树莓派是否进入系统 #define GUA_COMMUNICAION_COMMAND_ERR 0xff //通信数据错误的处理 //功能码对应的事件号,从main.h中复制过来 #define FUNC_GUA_CHECK_ELECTRIC_CHARGING_EVENT 0x10 //读电量和电流状态 #define FUNC_GUA_READ_CHARGE_CURRENT_EVENT 0x12 //读电流 #define FUNC_GUA_SET_RTC_TIME_EVENT 0x13 //修改rtc时间 #define FUNC_GUA_READ_VERSION_EVENT 0x14 //读版本号 #define FUNC_GUA_READ_RTC_EVENT 0x15 //读RTC时间 #define FUNC_GUA_SET_PI_POWER_ON_TIME_EVENT 0x16 //设置供电给树莓派的启动时间 #define FUNC_GUA_READ_PI_POWER_ON_TIME_EVENT 0x17 //读供电给树莓派的启动时间 #define FUNC_GUA_CHECK_PI_ONLINE_EVENT 0x18 //检测树莓派是否进入系统 #define FUNC_GUA_COMMUNICAION_COMMAND_ERR_EVT 0xff //通信数据错误的处理 #define GUA_DATA_PACKAGE_LEN 20 //20字节一包 //********************************************************************** //name: GUA_Communication_Judgment //introduce: 通信数据判断 //parameter: npGUA_Receive: 接收缓冲区首地址 //return: GUA_COMMUNICATION_JUDGMENT_TRUE: 数据包正确 // GUA_COMMUNICATION_JUDGMENT_FALSE: 数据包错误 //author: 甜甜的大香瓜 //email: 897503845@qq.com //QQ group: 香瓜单片机之STM8/STM32(164311667) //shop: opengua.taobao.com //changetime: 2024.12.6 //********************************************************************** uint8_t GUA_Communication_Judgment(uint8_t *npGUA_Receive) { uint8_t nGUA_Sof = *npGUA_Receive; uint8_t nGUA_Len = *(npGUA_Receive + 1); uint8_t nGUA_Func = *(npGUA_Receive + 2); uint8_t *npGUA_Data =npGUA_Receive + 3; uint8_t nGUA_Crc = *(npGUA_Receive + 3 + nGUA_Len); uint8_t nGUA_Crc_Count = 0; //判断起始位正确性 if(nGUA_Sof != 0xFE) { return GUA_COMMUNICATION_JUDGMENT_FALSE; } //接收数据长度 if(nGUA_Len > 16) { return GUA_COMMUNICATION_JUDGMENT_FALSE; }
//计算校验和 nGUA_Crc_Count += nGUA_Sof; nGUA_Crc_Count += nGUA_Len; nGUA_Crc_Count += nGUA_Func; while(nGUA_Len--) { nGUA_Crc_Count += *(npGUA_Data + nGUA_Len); }
//比较校验和 if(nGUA_Crc != nGUA_Crc_Count) { return GUA_COMMUNICATION_JUDGMENT_FALSE; } //数据包正确 return GUA_COMMUNICATION_JUDGMENT_TRUE; } //********************************************************************** //name: GUA_Communication_Process //introduce: 获取指令的功能码对应的事件号 //parameter: npGUA_Receive: 接收缓冲区首地址 // npGUA_Event: 要启动的事件 //return: none //author: 甜甜的大香瓜 //email: 897503845@qq.com //QQ group: 香瓜单片机之STM8/STM32(164311667) //shop: opengua.taobao.com //changetime: 2024.12.6 //********************************************************************** void GUA_Communication_Process(uint8_t *npGUA_Receive ,uint8_t *npGUA_Event) { uint8_t nGUA_Func = *(npGUA_Receive + 2);
//判断功能码 switch(nGUA_Func) { //00读电量和电流状态 case GUA_CHECK_ELECTRIC_CHARGING: { *npGUA_Event = FUNC_GUA_CHECK_ELECTRIC_CHARGING_EVENT; break; }
//02读电流 case GUA_READ_CHARGE_CURRENT: { *npGUA_Event = FUNC_GUA_READ_CHARGE_CURRENT_EVENT; break; }
//03修改rtc时间 case GUA_SET_RTC_TIME: { *npGUA_Event = FUNC_GUA_SET_RTC_TIME_EVENT; break; }
//04读版本号 case GUA_READ_VERSION: { *npGUA_Event = FUNC_GUA_READ_VERSION_EVENT; break; } //05读RTC时间 case GUA_READ_RTC: { *npGUA_Event = FUNC_GUA_READ_RTC_EVENT; break; }
//06设置供电给树莓派的启动时间 case GUA_SET_PI_POWER_ON_TIME: { *npGUA_Event = FUNC_GUA_SET_PI_POWER_ON_TIME_EVENT; break; }
//07读供电给树莓派的启动时间 case GUA_READ_PI_POWER_ON_TIME: { *npGUA_Event = FUNC_GUA_READ_PI_POWER_ON_TIME_EVENT; break; } //08检测树莓派是否进入系统 case GUA_CHECK_PI_ONLINE: { *npGUA_Event = FUNC_GUA_CHECK_PI_ONLINE_EVENT; break; }
//ff其他情况返回错误 default: { *npGUA_Event = FUNC_GUA_COMMUNICAION_COMMAND_ERR_EVT; break; } } } //********************************************************************** //name: GUA_Communication_DataPackage_Send //introduce: 通信数据打包并发送(包头+有效数据长度+功能码+有效数据+校验和) //parameter: none //return: none //author: 甜甜的大香瓜 //email: 897503845@qq.com //QQ group: 香瓜单片机之STM8/STM32(164311667) //shop: opengua.taobao.com //changetime: 2024.12.6 //********************************************************************** void GUA_Communication_DataPackage_Send(uint8_t nGUA_Func, uint8_t *npGUA_ValidData, uint8_t nGUA_ValidData_Len) { uint8_t nbGUA_DataPackage_Data[GUA_DATA_PACKAGE_LEN]; uint8_t nGUA_Num;
//初始化发送缓冲区 memset(nbGUA_DataPackage_Data, 0, GUA_DATA_PACKAGE_LEN);
//填充数据 nbGUA_DataPackage_Data[0] = 0xFE; //包头 nbGUA_DataPackage_Data[1] = nGUA_ValidData_Len; //数据长度 nbGUA_DataPackage_Data[2] = nGUA_Func; //功能码 memcpy(nbGUA_DataPackage_Data + 3, npGUA_ValidData, nGUA_ValidData_Len); //数据
nbGUA_DataPackage_Data[3 + nGUA_ValidData_Len] = 0; //校验和清零 for(nGUA_Num = 0; nGUA_Num < (3 + nGUA_ValidData_Len);nGUA_Num++) { nbGUA_DataPackage_Data[3 + nGUA_ValidData_Len] += nbGUA_DataPackage_Data[nGUA_Num]; //校验和累加 } //发送数据(总数据长度=包头1+数据长度1+功能码1+数据+校验和1) GUA_UART_Send(nbGUA_DataPackage_Data, nbGUA_DataPackage_Data[1]+4); } |
2)编写驱动GUA_Communication.h
(存放在“……\Projects\MT006_StdPeriph_Templates\GUA”)
//********************************************************************** //name: GUA_Communication.h //introduce: 香瓜的通信协议的头文件 //author: 甜甜的大香瓜 //email: 897503845@qq.com //QQ group: 香瓜单片机之STM8/STM32(164311667) //shop: opengua.taobao.com //changetime: 2024.12.6 //********************************************************************** #ifndef _GUA_COMMUNICATION_H_ #define _GUA_COMMUNICATION_H_ /*********************头文件************************/ #include <stdint.h> /*********************宏定义************************/ #define GUA_COMMUNICATION_JUDGMENT_FALSE 0 //数据不符合通信协议 #define GUA_COMMUNICATION_JUDGMENT_TRUE 1 //数据符合通信协议 /*********************外部函数声明************************/ /*********************外部函数声明************************/ extern uint8_t GUA_Communication_Judgment(uint8_t *npGUA_Receive); extern void GUA_Communication_Process(uint8_t *npGUA_Receive, uint8_t *npGUA_Event); extern void GUA_Communication_DataPackage_Send(uint8_t nGUA_Func, uint8_t *npGUA_ValidData, uint8_t nGUA_ValidData_Len); #endif |
3)工程中添加驱动文件
4)在MDK设置中添加驱动源文件路径
2、添加库的驱动
1)添加库的驱动文件(为了方便一次性都添加进来,已有则不用添加)
2)添加库的驱动头文件(mt006_conf.h 中)(为了方便一次性都添加进来,已有则不用添加)
3、在应用层中调用
1)添加驱动头文件(main.c中)
#include “GUA_Communication.h” |
2)参考实例代码(main.c的main函数中)
//02读电流 case FUNC_GUA_READ_CHARGE_CURRENT_EVENT: { uint8_t nGUA_Func = 0x02; //功能码 uint8_t naGUA_Data[2]; //有效数据 uint8_t nGUA_Len = 0x02; //有效数据的长度 //更新电流值 GUA_SC89890h_CheckVinPlugOk();
//保存电流数据 naGUA_Data[0] = (gGUA_SC89890h_ChargeCurrent>>8) & 0xFF; naGUA_Data[1] = gGUA_SC89890h_ChargeCurrent & 0xFF;
//发送数据 GUA_Communication_DataPackage_Send(nGUA_Func, naGUA_Data, nGUA_Len);
//运行模式 gnGUA_Function = FUNC_GUA_ACTIVE_EVENT; break; } |
不可以直接添加使用,会报错
八、注意事项
暂无
九、实验结果
暂无
相关文章:
【MT32F006】MT32F006之通信协议
本文最后修改时间:2025年01月09日 一、本节简介 本文介绍如何使用MT32F006写一个通信协议。 二、实验平台 库版本:V1.0.0 编译软件:MDK5.37 硬件平台:MT32F006开发板(主芯片MT32F006) 仿真器ÿ…...
CMake学习笔记(2)
1. 嵌套的CMake 如果项目很大,或者项目中有很多的源码目录,在通过CMake管理项目的时候如果只使用一个CMakeLists.txt,那么这个文件相对会比较复杂,有一种化繁为简的方式就是给每个源码目录都添加一个CMakeLists.txt文件ÿ…...
访客机的四个功能
访客机,也被称为访客自动登记安全管理系统或访客一体机,是现代安全管理中不可或缺的一部分。它通过整合计算机技术、射频识别技术、指纹生物识别、触摸屏手写技术、文字识别(OCR)技术、热敏打印技术、条码技术、数码摄像技术、自动…...
【Linux系统】—— vim 的使用
【Linux系统】—— vim 的使用 1 vim 的基本概念2 vim 的多模式3 命令模式下的命令集3.1 进入/退出其他模式3.2 光标移动命令集3.3 复制/剪切/粘贴/删除命令集3.4 撤销命令集3.5 查找命令集3.6 替换命令集3.7 进入与退出替换模式 4 批量化编译5 底行模式6 vim 小技巧7 vim简单配…...
华为C语言编程规范总结
1.头文件更改会导致所有直接或间接包含该头文件的的C文件重新编译,会增加大量编译工作量,延长编译时间,因此: 1.1 头文件里尽量少包含头文件 1.2 头文件应向稳定的方向包含 2.每一个.c文件应有一个同名.h文件,…...
深入学习 Python 量化编程
深入学习 Python 量化编程 第一章:Python 基础与量化编程环境搭建 1.1 安装必要的库 首先,你需要安装一些在量化编程中常用的 Python 库。可以通过以下命令安装这些库: pip install numpy pandas matplotlib yfinance backtrader scikit-…...
初识Java3
目录 一.面向对象与面向过程编程区别 二.类 1.类的定义 2.类一般格式 3.类的实例化具体对象 4.this的使用(习惯经常用) 5.this引用 三.对象 1.初始化对象方法 2.构造方法 四.封装 1.封装: 2.拓展“包” (1).包概念 (…...
uniapp 微信小程序内嵌h5实时通信
描述: 小程序webview内嵌的h5需要向小程序实时发送消息,有人说postMessage可以实现,所以试验一下,结果是实现不了实时,只能在特定时机后退、组件销毁、分享时小程序才能接收到信息(小程序为了安全等考虑做了…...
Blazor开发复杂信息管理系统的优势
随着现代企业信息管理需求的不断提升,开发高效、易维护、可扩展的系统变得尤为重要。在这个过程中,Blazor作为一种新兴的Web开发框架,因其独特的优势,逐渐成为开发复杂信息管理系统的首选技术之一。本文将结合Blazor在开发复杂信息…...
【微服务】面试题 5、分布式系统理论:CAP 与 BASE 详解
分布式系统理论:CAP 与 BASE 详解 一、CAP 定理 背景与定义:1998 年由加州大学科学家埃里克布鲁尔提出,分布式系统存在一致性(Consistency)、可用性(Availability)、分区容错性(Part…...
<论文>时序大模型如何应用于金融领域?
一、摘要 本文介绍2024年的论文《Financial Fine-tuning a Large Time Series Model》,论文探索了主流的时间序列大模型在金融领域的微调应用实践,为时序大模型的领域微调提供了参考。 译文: 大型模型在自然语言处理、图像生成以及近期的时间…...
Oracle 表分区简介
目录 一. 前置知识1.1 什么是表分区1.2 表分区的优势1.3 表分区的使用条件 二. 表分区的方法2.1 范围分区(Range Partitioning)2.2 列表分区(List Partitioning)2.3 哈希分区(Hash Partitioning)2.4 复合分…...
安卓硬件加速hwui
安卓硬件加速 本文基于安卓11。 从 Android 3.0 (API 级别 11) 开始,Android 2D 渲染管道支持硬件加速,这意味着在 View 的画布上执行的所有绘图操作都使用 GPU。由于启用硬件加速所需的资源增加,你的应用程序将消耗更多内存。 软件绘制&am…...
【Bluedroid】HFP连接流程源码分析(二)
接上一篇【Bluedroid】HFP连接流程源码分析(一)-CSDN博客分析。本篇主要围绕RFCOMM Connect 与 RFCOMM UA Frame 的处理流程来展开分析。 RFCOMM Connect RFCOMM(Radio Frequency Communication)作为蓝牙协议栈的关键部分&#…...
基于文件系统分布式锁原理
分布式锁:在一个公共的存储服务上打上一个标记,如Redis的setnx命令,是先到先得方式获得锁,ZooKeeper有点像下面的demo,比较大小的方式判决谁获得锁。 package com.ldj.mybatisflex.demo;import java.util.*; import java.util.co…...
java语法知识(二)
1. class文件可以直接拖动到idea中,显示源码。 2.idea快捷键: sout : System.out.println 输出内容.sout :---》 System.out.println(输出内容); psvm: public static void main() 格式化:ctrl altL 复制粘贴:ctrld 3.注释…...
基于Piquasso的光量子计算机的模拟与编程
一、引言 在科技飞速发展的当下,量子计算作为前沿领域,正以前所未有的态势蓬勃崛起。它凭借独特的量子力学原理,为解决诸多经典计算难以攻克的复杂问题提供了全新路径。从优化物流配送网络,以实现资源高效调配,到药物分子结构的精准模拟,加速新药研发进程;从金融风险的…...
导出文件,能够导出但是文件打不开
背景: 在项目开发中,对于列表的查询,而后会有导出功能,这里导出的是一个excell表格。实现了两种,1.导出的文件,命名是前端传输过去的;2.导出的文件,命名是根据后端返回的文件名获取的…...
【动手学电机驱动】STM32-FOC(4)STM32之UART 串口通信
STM32-FOC(1)STM32 电机控制的软件开发环境 STM32-FOC(2)STM32 导入和创建项目 STM32-FOC(3)STM32 三路互补 PWM 输出 STM32-FOC(4)STM32之UART 串口通信 STM32-FOC(6&am…...
RabbitMQ 高可用方案:原理、构建与运维全解析
文章目录 前言:1 集群方案的原理2 RabbitMQ高可用集群相关概念2.1 设计集群的目的2.2 集群配置方式2.3 节点类型 3 集群架构3.1 为什么使用集群3.2 集群的特点3.3 集群异常处理3.4 普通集群模式3.5 镜像集群模式 前言: 在实际生产中,RabbitM…...
Center Loss 和 ArcFace Loss 笔记
一、Center Loss 1. 定义 Center Loss 旨在最小化类内特征的离散程度,通过约束样本特征与其类别中心之间的距离,提高类内特征的聚合性。 2. 公式 对于样本 xi 和其类别yi,Center Loss 的公式为: xi: 当前样本的特征向量&…...
深度解读微软Speech服务:让语音识别走进现实
大家好,今天我们来探讨一个激动人心的技术话题:微软的语音识别服务如何为我们提供强大的语音识别解决方案,特别是在电话录音中识别出不同的说话人。 场景描绘 想象一下,你有一段电话录音,并需要将其中的多个说话人区分…...
第21篇 基于ARM A9处理器用汇编语言实现中断<三>
Q:怎样编写ARM A9处理器汇编语言代码配置按键端口产生中断? A:使用Intel Monitor Program创建中断程序时,Linker Section Presets下拉菜单中需选择Exceptions。主程序在.vectors代码段为ARM处理器设置异常向量表,在…...
专题 - STM32
基础 基础知识 STM所有产品线(列举型号): STM产品的3内核架构(列举ARM芯片架构): STM32的3开发方式: STM32的5开发工具和套件: 若要在电脑上直接硬件级调试STM32设备,则…...
极客说|Azure AI Agent Service 结合 AutoGen/Semantic Kernel 构建多智能体解决⽅案
作者:卢建晖 - 微软高级云技术布道师 「极客说」 是一档专注 AI 时代开发者分享的专栏,我们邀请来自微软以及技术社区专家,带来最前沿的技术干货与实践经验。在这里,您将看到深度教程、最佳实践和创新解决方案。关注「极客说」&am…...
【C++指南】模板 深度解析
💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《C指南》 期待您的关注 目录 1. 引言 2. 模板的基本概念 3. 函数模板 3.1 定义和语法 3.2 函数模板实例化 3.3 隐式实例化 …...
【traefik】forwadAuth中间件跨namespace请求的问题
前情提要 - fowardAuth鉴权中间件的使用: 【traefik】使用forwardAuth中间件做网关层的全局鉴权 1. 问题 我的 traefik-ingress-controller 所在 namespace: traefik 业务服务所在 namespace: apps 路由与 forwardAuth 中间件配置如下: # 路由 apiV…...
【25考研】西南交通大学软件工程复试攻略!
一、复试内容 复试对考生的既往学业情况、外语听说交流能力、专业素质和科研创新能力,以及综合素质和一贯表现等进行全面考查,主要考核内容包括思想政治素质和道德品质、外语听说能力、专业素质和能力,综合素质及能力。考核由上机考试和面试两部分组成&a…...
在 Safari 浏览器中,快速将页面恢复到 100% 缩放(也就是默认尺寸)Command (⌘) + 0 (零)
在 Safari 浏览器中,没有一个专门的快捷键可以将页面恢复到默认的缩放比例。 但是,你可以使用以下两种方法快速将页面恢复到 100% 缩放(也就是默认尺寸): 方法一:使用快捷键 (最常用) Command (⌘) 0 (零…...
linux的大内核锁与顺序锁
大内核锁 Linux大内核锁(Big Kernel Lock,BKL)是Linux内核中的一种锁机制,用于保护内核资源,以下是关于它的详细介绍: 概念与作用 大内核锁是一种全局的互斥锁,在同一时刻只允许一个进程访问…...
CVE-2025-22777 (CVSS 9.8):WordPress | GiveWP 插件的严重漏洞
漏洞描述 GiveWP 插件中发现了一个严重漏洞,该插件是 WordPress 最广泛使用的在线捐赠和筹款工具之一。该漏洞的编号为 CVE-2025-22777,CVSS 评分为 9.8,表明其严重性。 GiveWP 插件拥有超过 100,000 个活跃安装,为全球无数捐赠平…...
牛客周赛 Round 76题解
小红出题 思路:我们发现,每七天可以获得15元,那么我们可以对7取模,看能有多少7的倍数,然后剩下的就是看是否超过5,超过5就直接15,否则加上天数*3 #include<bits/stdc.h> using namespace…...
【ARM】MDK如何将变量存储到指定内存地址
1、 文档目标 通过MDK的工程配置,将指定的变量存储到指定的内存地址上。 2、 问题场景 在项目工程的开发过程中,对于flash要进行分区,需要规划出一个特定的内存区域来存储变量。 3、软硬件环境 1)、软件版本:MDK 5.…...
解决在arm架构下的欧拉操作系统mysql8.4.2源码安装
目标:在欧拉的22.03 (LTS-SP4)版本操作系统,cpu的架构为ARM,源码安装mysql-8.4.2。 1.查看操作系统 # cat /etc/os-release NAME"openEuler" VERSION"22.03 (LTS-SP4)"# uname -i aarch642.mysql下载地址 mysql的下载…...
SpringAop
SpringAop aop定义核心概念aop基础实现执行流程 aop进阶通知类型切入点表达式的抽取通知的执行顺序切入点表达式execution方式实现annotation注解方式实现示例 笔记链接 aop定义 AOP:Aspect Oriented Programming(面向切面编程、面向方面编程)…...
C++内存泄露排查
内存泄漏是指程序动态分配的内存未能及时释放,导致系统内存逐渐耗尽,最终可能造成程序崩溃或性能下降。在C中,内存泄漏通常发生在使用new或malloc等分配内存的操作时,但没有正确地使用delete或free来释放这块内存。 在日常开发过程…...
Cesium小知识:pointPrimitive collection 详解
Cesium.PointPrimitiveCollection 是 Cesium 中用于高效管理和渲染大量点(points)的一个类。它允许你创建和管理大量的 PointPrimitive 实例,这些实例可以用来表示地理空间中的点数据,如传感器位置、车辆位置、兴趣点等。与直接使用 Cesium.Entity 相比,PointPrimitiveCol…...
从 Conda 到 Pip-tools:Python 依赖管理全景探索20250113
从 Conda 到 Pip-tools:Python 依赖管理全景探索 引言 在 Python 开发中,依赖管理是一个"常见但复杂"的问题:一次简单的版本冲突可能让团队调试数小时;一次不受控的依赖升级可能让生产环境瘫痪。随着项目规模的增加和…...
浅谈云计算01 | 云计算服务的特点
在当今数字化时代,云计算作为一种强大的技术解决方案,正逐渐改变着企业和个人对信息技术的使用方式。本文将详细探讨云计算的五个主要特点,包括按需自助服务、广泛的网络接入、资源池化、快速弹性伸缩以及可计量服务。 一、按需自助服务 云…...
2025年,华为认证HCIA、HCIP、HCIE 该如何选择?
眼看都到 2025 年啦,华为认证还吃香不? 把这问题摆在每个网络工程师跟前,答案可没那么容易说清楚。 到底考不考它值当不值当,重点在于您自己的职业规划,还有对行业走向的领会。 2025 年华为认证仍然值得一考&#…...
使用Selenium进行网页自动化测试
在使用Selenium进行网页自动化测试时,获取网络请求数据(即network数据)并不直接由Selenium库提供。Selenium主要用于与网页内容进行交互(如点击、输入文本、获取页面元素等),但它本身不拦截或记录网络请求。…...
Linux 下 mtrace 的详细介绍
在 Linux 系统中,内存管理是操作系统的一项重要任务,而内存泄漏(Memory Leak)是开发过程中常见且棘手的问题之一。为了帮助开发者追踪和调试内存泄漏问题,mtrace 提供了一种有效的方式来检测和分析内存的分配与释放情况…...
【DB-GPT】开启数据库交互新篇章的技术探索与实践
一、引言:AI原生数据应用开发的挑战与机遇 在数字化转型的浪潮中,企业对于智能化应用的需求日益增长。然而,传统的数据应用开发方式面临着诸多挑战,如技术栈复杂、开发周期长、成本高昂、难以维护等。这些问题限制了智能化应用的…...
深入 Flutter 和 Compose 在 UI 渲染刷新时 Diff 实现对比
众所周知,不管是什么框架,在前端 UI 渲染时,都会有构造出一套相关的渲染树,并且在 UI 更新时,为了尽可能提高性能,一般都只会进行「差异化」更新,而不是对整个 UI Tree 进行刷新,所以…...
Android 网络层相关介绍
关注 Android 默认支持的网络管理行为,默认支持的网络服务功能。 功能术语 术语缩写全称释义DHCPv6Dynamic Host Configuration Protocol for IPv6动态主机配置协议的第六版,用于在IPv6网络中动态分配IP地址和其他网络配置参数。DNS Domain Name System域名系统。LLALink-Loc…...
ThreeJs开发环境安装与首个DEMO
安装开发环境 我这边使用的JetBrain的WebStorm,咨询过很多其他开发从业者,普遍使用vscode的比较多。但是考虑到vscode涉及到不少插件安装和IDE配置,作为傻瓜式入门,我这边采用WebStorm。 下载地址: WebStorm: The J…...
【Vim Masterclass 笔记09】S06L22:Vim 核心操作训练之 —— 文本的搜索、查找与替换操作(第一部分)
文章目录 S06L22 Search, Find, and Replace - Part One1 从光标位置起,正向定位到当前行的首个字符 b2 从光标位置起,反向查找某个字符3 重复上一次字符查找操作4 定位到目标字符的前一个字符5 单字符查找与 Vim 命令的组合6 跨行查找某字符串7 Vim 的增…...
js:根据后端返回数据的最大值进行计算然后设置这个最大值为百分之百,其他的值除这个最大值
问: 现在tabData.value 接收到了后端返回的数据, [{text:人力,percentage:‘90’},{text:物品,percentage:‘20’},{text:物理,percentage:‘50’},{text:服务,percentageÿ…...
线形回归与小批量梯度下降实例
1、准备数据集 import numpy as np import matplotlib.pyplot as pltfrom torch.utils.data import DataLoader from torch.utils.data import TensorDataset######################################################################### #################准备若干个随机的x和…...
【数学】概率论与数理统计(三)
文章目录 [toc] 随机变量的概念随机事件数量化随机变量 离散型随机变量及其概率分布随机变量的分类离散型随机变量离散型随机变量的常见分布两点分布二项分布泊松分布泊松定理证明 泊松分布 超几何分布几何分布 连续型随机变量及其概率分布连续型随机变量零概率事件几乎必然发生…...