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

GD32F470+CH395Q

tcp_client配置 

第一步:资料下载

以太网协议栈芯片 CH395 - 南京沁恒微电子股份有限公司

第二步:准备工程

(1) 首先准备一个编译无报错、可以正常打印和延时的工程文件,官方例程采用STM32F1芯片,但本文采用GD32F470芯片

(2)将例程代码中的PUB文件夹加入,keil工程添加CH395CMD.c文件和CH395SPI_HW.c文件

(3)将例程代码中的main.c内容全部加入到自己的main.c文件中,如果觉得函数较多,可以自己放置到CH398CMD.c函数中

(4)例程代码使用SPI_DMA,看个人需要,使用则配置,不使用则屏蔽

(5)此时编译有很多错误,继续下一步

第三步:引脚配置

ch395Q支持SPI和串口通信,本文采用SPI通信,我们需要配置6个GPIO口,分别如下

一、SPI通信基础引脚

  1. CS(片选引脚)
    • 功能:用于使能CH395的SPI通信,低电平有效。
    • 配置:需连接到STM32的GPIO引脚,并在代码中控制其电平12。
  2. SCK(时钟引脚)
    • 功能:提供SPI通信的时钟信号,由主设备(如STM32)控制。
    • 配置:需连接到STM32的SPI外设时钟线(如SPI1_SCK),并设置时钟频率(如36MHz)13。
  3. MOSI(主出从入引脚)
    • 功能:主设备向CH395发送数据。
    • 配置:需连接到STM32的SPI外设MOSI线(如SPI1_MOSI)
  4. MISO(主入从出引脚)
    • 功能:CH395向主设备返回数据。
    • 配置:需连接到STM32的SPI外设MISO线(如SPI1_MISO)

二、辅助控制引脚

  1. INT(中断引脚)
    • 功能:用于CH395通知主设备事件(如数据接收完成、错误状态)。
    • 配置:需连接到STM32的外部中断引脚(如PA0),并设置为输入模式,同时启用中断服务程序14。
  2. RST(复位引脚)
    • 功能:硬件复位CH395,低电平有效。
    • 配置:需连接到STM32的GPIO引脚,初始化时拉低再拉高以完成复位
CH395_PORT_INIT();//SPI初始化
CH395_GPIO_INIT();//RST和INT引脚初始化
CH395Reset();//修改RST对应引脚
xCH395CmdStart();//修改CS对应引脚,CMD_START_HANDEL();可以删除,无作用
xEndCH395Cmd();//修改CS对应引脚,CMD_END_HANDEL();可以删除,无作用

第四步:延时函数配置

例程代码使用debug.c文件中配置的延时函数,本文采用自定义函数,或者直接全文替换 

void Delay_Us(uint32_t us)
{us *= 168;  // 72MHz下1us≈72个周期(每条循环指令约3周期)while (us--) {__NOP();  // 内联汇编NOP指令 }
}void Delay_Ms(uint32_t ms)
{delay_1ms(ms);
}

第五步:编译

此处编译后肯定会多处报错,比如UINT8没有定义,stm32f10x_dma.h文件找不到等等,这些都是正常的,按照自己的经验进行修改即可,直到编译无警告,无报错

第六步:ip修改

InitCH395InfParam() /* CH395 Related definition */
const uint8_t CH395IPAddr[4] = {192, 168, 1, 101}; /* CH395 IP  */
const uint8_t CH395GWIPAddr[4] = {192, 168, 1, 1}; /* CH395 gateway */
const uint8_t CH395IPMask[4] = {255, 255, 255, 0}; /* CH395 mask *//* Socket definitions */
const uint8_t Socket0DesIP[4] = {192, 168, 1, 123}; /* Destination IP address for Socket 0 */
const uint16_t Socket0DesPort = 1000;               /* Destination port for Socket 0 */
const uint16_t Socket0SourPort = 5000;              /* Source port for Socket 0 */

第七步:查看保活机制

keeplive_set()#define DEF_KEEP_LIVE_IDLE (15 * 1000)   /* Idle time */
#define DEF_KEEP_LIVE_PERIOD (20 * 1000) /* Send a KEEPALIVE packet every 20 seconds */
#define DEF_KEEP_LIVE_CNT 200            /* Number of retry attempts */DEF_KEEP_LIVE_IDLE:空闲时间,可能指的是在TCP连接建立后,如果在15秒内没有数据传输,则开始发送保活包。这与TCP的保活机制中的空闲时间类似,用于确定何时开始检测连接是否有效。
DEF_KEEP_LIVE_PERIOD:每隔20秒发送一次保活包。这个参数可能控制保活包的发送频率,确保在空闲期间定期检测连接状态。
DEF_KEEP_LIVE_CNT:重试次数200次。当保活包发送后未收到响应时,会进行重试,这个参数指定最大重试次数,超过后认为连接已断开。
  • 保活机制主要用于维持TCP连接的活跃状态,防止因网络中断或空闲导致连接被中间设备(如路由器、防火墙)主动断开
  • 应对网络环境不稳定:在工业控制、远程监控等场景中,网络可能因电磁干扰、信号衰减等问题出现瞬时中断。保活机制通过周期性发送心跳包(空数据包),可快速检测链路异常并触发重连,避免数据丢失。
  • 支持物联网长连接需求:CH395常用于MQTT、HTTP长连接等物联网协议,需保持设备与服务器持续通信。若长时间无数据传输,服务器或网关可能关闭连接,保活包能维持连接有效性

第八步:全局中断

 CH395GlobalInterrupt  --》  GINT_STAT_SOCK0

针对一个TCP连接,主要有以下几个中断

void CH395SocketInterrupt(uint8_t sockindex)
{sock_int_status[sockindex] |= CH395CMDGetSocketInt(sockindex); /* Gets the socket interrupt status */if (sock_int_status[sockindex] & SINT_STAT_RECV) /* Receive interruption */{//接收中断,接受到数据后会进来这里,但例程代码在Data_Loop函数中处理// Handle it in the main program}if (sock_int_status[sockindex] & SINT_STAT_SENDBUF_FREE) /* The send buffer is free and can continue writing data to be sent */{//发送缓冲区为空,可以发送数据,但例程代码在Data_Loop函数中处理// Handle it in the main program}if (sock_int_status[sockindex] & SINT_STAT_SEND_OK) /* Send completion interrupt */{//发送完成中断sock_int_status[sockindex] &= ~SINT_STAT_SEND_OK;}if (sock_int_status[sockindex] & SINT_STAT_CONNECT) /* The connection is interrupted, valid only in TCP mode */{//连接成功中断sock_int_status[sockindex] &= ~SINT_STAT_CONNECT;CH395CMDSetKeepLive(sockindex, 1); /* Enable the KEEPALIVE timer */LOG("SINT_STAT_CONNECT\r\n");}if (sock_int_status[sockindex] & SINT_STAT_DISCONNECT) /* Disconnect interrupt, valid only in TCP mode */{//断开连接中断sock_int_status[sockindex] &= ~SINT_STAT_DISCONNECT;LOG("SINT_STAT_DISCONNECT \r\n");}if (sock_int_status[sockindex] & SINT_STAT_TIM_OUT) /* Timeout interrupt, valid only in TCP mode */{//连接超时中断,比如服务器未打开sock_int_status[sockindex] &= ~SINT_STAT_TIM_OUT;LOG("SINT_STAT_TIM_OUT\r\n");}
}

Data_Loop函数,主要就是将接收到的数据发出去

第九步:测试

DHCP配置

第一步:加入DHCP相关变量

#define CH395_DHCP 1
UINT8 flag = 0; /* DHCP success flag */

第二步:增加DHCP中断处理

CH395GlobalInterrupt函数UINT16 i;UINT8 buf[20];if (init_status & GINT_STAT_DHCP){#if CH395_DHCPi = CH395CMDGetDHCPStatus();if (i == 0){flag = 1;CH395CMDGetIPInf(buf);printf("IP:%02d.%02d.%02d.%02d\n", (UINT16)buf[0], (UINT16)buf[1], (UINT16)buf[2], (UINT16)buf[3]);printf("GWIP:%02d.%02d.%02d.%02d\n", (UINT16)buf[4], (UINT16)buf[5], (UINT16)buf[6], (UINT16)buf[7]);printf("Mask:%02d.%02d.%02d.%02d\n", (UINT16)buf[8], (UINT16)buf[9], (UINT16)buf[10], (UINT16)buf[11]);printf("DNS1:%02d.%02d.%02d.%02d\n", (UINT16)buf[12], (UINT16)buf[13], (UINT16)buf[14], (UINT16)buf[15]);printf("DNS2:%02d.%02d.%02d.%02d\n", (UINT16)buf[16], (UINT16)buf[17], (UINT16)buf[18], (UINT16)buf[19]);}#endif}

第三步:取消ip,gw,mask初始化

CH395Init函数#if !CH395_DHCP                             /* If DHCP is enabled, the IP, gateway, and subnet mask do not need to be set */CH395CMDSetIPAddr(CH395Inf.IPAddr);     /* Set the CH395's IP address */CH395CMDSetGWIPAddr(CH395Inf.GWIPAddr); /* Set the gateway address */CH395CMDSetMASKAddr(CH395Inf.MASKAddr); /* Set the subnet mask, default is 255.255.255.0 */
#endif

第四步:删除保活机制(或者新增宏定义)

//keeplive_set();//屏蔽此行代码CH395SocketInterrupt函数if (sock_int_status[sockindex] & SINT_STAT_CONNECT) /* The connection is interrupted, valid only in TCP mode */{sock_int_status[sockindex] &= ~SINT_STAT_CONNECT;//CH395CMDSetKeepLive(sockindex, 1); /* Enable the KEEPALIVE timer *///屏蔽此行函数LOG("SINT_STAT_CONNECT\r\n");}

第五步:使能DHCP功能

#if CH395_DHCPprintf("Start DHCP\n");i = CH395CMDDHCPEnable(1);mStopIfError(i);
#endif

第六步:改变tcp连接地方(DHCP分配成功后调用连接服务器函数)

        while (1){if (Query395Interrupt() == 0){CH395GlobalInterrupt();}if (flag){flag = 0;InitSocketParam(); /* Initialize socket related variables */CH395SocketInitOpen();Data_Loop(0);//调用时机暂定}}//  InitSocketParam()用于初始化ip,gw和mask.并且也需要将DHCP中断获取到的ip,gw和mask替换进去

第七步:测试

调试心得 

(1)当服务器主动关闭连接时,会进入TIME_WAIT状态(持续2*MSL,默认约60秒),导致原端口暂时无法复用,如果服务器没有做端口复用这个功能,可能会出现这个现象

相关文章:

GD32F470+CH395Q

tcp_client配置 第一步:资料下载 以太网协议栈芯片 CH395 - 南京沁恒微电子股份有限公司 第二步:准备工程 (1) 首先准备一个编译无报错、可以正常打印和延时的工程文件,官方例程采用STM32F1芯片,但本文…...

解决Hyper-V无法启动Debian 12虚拟机

问题 有时,我们会想要在Hyper-V中运行Debian12。我们想利用该系统的ISO镜像文件安装一个全新的虚拟机。 然而,当我们在Hyper-V中创建了一个2代虚拟机、添加了Debian 12的网络安装(Netinst)ISO作为最先启动的介质时,Hy…...

linux redis 设置密码以及redis拓展

redis拓展:http://pecl.php.net/package/redis 在服务器上,这里以linux服务器为例,为redis配置密码。 需要永久配置密码的话就去redis.conf的配置文件中找到requirepass这个参数,如下配置: 修改redis.conf配置文件 # requirepass …...

uniapp app 端获取陀螺仪数据的实现攻略

在 uniapp 开发中,uni.startGyroscope在 app 端并不被支持,这给需要获取陀螺仪数据的开发者带来了挑战。不过,借助 Native.js,我们能调用安卓原生代码实现这一需求。接下来,就为大家详细介绍实现步骤,并附上…...

第三节:Vben Admin 最新 v5.0 对接后端登录接口(下)

文章目录 前言一、处理请求头Authorization二、/auth/user/info 接口前端接口后端接口三、/auth/codes 接口1.前端2.后端四、测试接口前言 上一节内容,实现了登录的/auth/login 接口,但是登陆没有完成,还需要完成下面两个接口。才能完成登录。 一、处理请求头Authorizatio…...

标题:基于自适应阈值与K-means聚类的图像行列排序与拼接处理

摘要: 本文提出了一种基于自适应阈值和K-means聚类的图像行列排序与拼接方法。通过对灰度图像的自适应二值化处理,计算并分析图像的左右边距,从而确定图像的行数与列数。通过对图像进行特征提取,并使用K-means聚类进行排序&#…...

修改磁盘权限为管理员

1.右击需要修改的磁盘,点击属性 然后一路点击确定 已经修改好了...

P1782 旅行商的背包 Solution

Description 有一个体积为 C C C 的背包和若干种物品. 前 n n n 种物品,第 i i i 种体积为 v i v_i vi​,价值 w i w_i wi​,有 d i d_i di​ 件. 后 m m m 种物品,每种对应一个函数 f ( x ) a i x 2 b i x c i f(x)a…...

Acrel-EIoT 能源物联网云平台在能耗监测系统中的创新设计

摘要 随着能源管理的重要性日益凸显,能耗监测系统成为实现能源高效利用的关键手段。本文详细介绍了基于安科瑞Acrel-EIoT能源物联网云平台的能耗监测系统的设计架构与应用实践。该平台采用分层分布式结构,涵盖感知层、网络层、平台层和应用层&#xff0…...

乘法逆元【费马小定理+扩展欧几里得】

目录 模运算性质费马小定理乘法逆元扩展欧几里得算法随机栈 模运算性质 费马小定理 a,b互质:gcd(a,b)1 乘法逆元 a,b互质,满足a*x同余1(mod b),x是a模b的乘法逆元,记作a的-1次方。 扩展欧几里得算法 求axbygcd(a,b)的一组(x,y). 随机栈 题目来源&…...

Linux进程间通信(上)(21)

文章目录 前言一、什么是进程间通信?概念目的本质分类 二、管道什么是管道匿名管道匿名管道的原理pipe函数匿名管道使用步骤管道读写规则管道的特点管道的四种特殊情况管道的大小 总结 前言 本篇出得有点慢,因为我在这里更换了我的开发环境   不再使用…...

力扣面试150题--对称二叉树

Day 41 题目描述 做法 原理:拆分为根节点的左右两棵子树,比较左子树的右和右子树的左,左子树的左和右子树的右 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode righ…...

深度学习系统学习系列【6】之深度学习技巧

文章目录 数据集准备数据集扩展数据预处理1. 0均值(Zero Centralization)代码实现 2. 归一化(Normalization)代码实现 3. 主成分分析(Principal Component Analysis, PCA)实现步骤代码实现 4. 白化&#xf…...

vue项目中渲染markdown并处理报错

前言:想在vue项目中渲染markdown并处理报错问题 有以下几种方式: 1、使用第三方Markdown插件 2、通过Markdown转HTML工具 3、使用Vue组件处理Markdown 一、首先第一种:使用第三方Markdown插件 安装vue-markdown插件 或者 markdown-it&#xf…...

Vue3.5 企业级管理系统实战(十七):角色管理

本篇主要探讨角色管理功能,其中菜单权限这里先不实现,后续在菜单管理中再进行实现。接口部分依然是使用 Apifox mock 的。 1 角色 api 在 src/api/role.ts 中添加角色相关 api,代码如下: //src/api/role.ts import service fro…...

【AI论文】FormalMATH:大型语言模型形式化数学推理能力基准测试

摘要:正式的数学推理仍然是人工智能面临的一个关键挑战,受到现有基准在范围和规模上的限制。 为了解决这个问题,我们提出了FormalMATH,这是一个大规模的Lean4基准,包含5560个经过形式验证的问题,这些问题涵…...

9-4 USART串口数据包

HEX数据包的接收 研究几个小问题 1.包头包尾和数据载荷重复的问题 这里定义FF为包头,FE为包尾,如果我传输的数据本身就是FF和FE怎么呢?那这个问题确实存在,如果数据和包头包尾重复,可能会引起误判。我们有以下几种解…...

Babylon.js学习之路《 前言:为什么要学习Babylon.js 》

文章目录 引言:3D 开发在 Web 中的崛起为什么需要 Web 3D 开发?当选火热的应用场景数据表达方式的改变 Web 3D 的独特优势跨平台与零安装开发成本低即时更新与传播便捷 WebGL 的定位与挑战WebGL 是什么?WebGL 的直接使用痛点 为什么需要 Baby…...

今年我国已发生三级以上地震318次

快科技5月6日消息,根据中国地震台网的统计,今年以来(截至4月30日),我国共发生三级以上地震318次,其中3.0-3.9级248次,4.0-4.9级61次,5.0-5.9级7次,6.0-6.9级2次&#xff…...

在与大语言模型交互中的礼貌现象:技术影响、社会行为与文化意义的多维度探讨

概述 关于是否值得对 AI 保持礼貌的公众意见,几乎和咖啡或红酒的最新研究结果一样频繁变化——这个月被推崇备至,下个月又受到质疑。即便如此,越来越多的用户现在在提示语中加入“请”或“谢谢”,这不仅仅是因为习惯,…...

Java后端开发day42--IO流(二)--字符集字符流

(以下内容全部来自上述课程) 拓展. try…catch异常处理(能看懂) 接口:AutoCloseable 特点:特定的情况下,可以自动释放资源 注意:只有实现了AutoCloseable接口的类,才能…...

【HarmonyOS 5】鸿蒙发展历程

【HarmonyOS 5】鸿蒙发展历程 一、鸿蒙 HarmonyOS 版本年代记 鸿蒙 1.0: 2019 年 8 月 9 日,华为在开发者大会上正式发布鸿蒙 1.0 系统,这一版本首次应用于华为荣耀智慧屏产品中,标志着华为正式进军操作系统领域。该版本初步展现…...

使用蚁群算法求解VRPTW问题

这里写目录标题 蚁群优化算法Python实现ACO求解VRPTW问题Java实现ACO求解VRPTW问题蚁群优化算法 蚁群算法(ACO)适合求解带时间窗的车辆路径优化问题(VRPTW),主要基于其仿生智能机制与问题特性的深度契合,具体体现在以下六个方面: 时间窗约束的自然映射 信息素导向与时间…...

内存的位运算

示例:提取和设置标志位 假设我们有一个32位的整数,其中不同的位代表不同的标志。例如: 位0:是否开启日志(0表示关闭,1表示开启) 位1:是否启用调试模式(0表示禁用&#…...

高性能网络优化:深入解析忙轮询(Busy Polling)技术

在现代高性能网络应用中,如何降低数据包处理延迟、提升吞吐量是开发者与系统工程师的核心挑战之一。传统的“中断驱动”模式在高负载场景下表现不佳,而忙轮询(Busy Polling) 作为一种优化技术,通过主动轮询机制显著改善网络性能。本文将从原理、实现到实践,全面解析忙轮询…...

Linux grep 命令详解及示例大全

文章目录 一、基本语法二、常用选项及示例1. 基本匹配:查找包含某字符串的行2. 忽略大小写匹配 -i3. 显示行号 -n4. 递归查找目录下的文件 -r 或 -R5. 仅显示匹配的字符串 -o6. 使用正则表达式 -E(扩展)或 egrep7. 显示匹配前后行 -A, -B, -C…...

前端知识-hook

React 的生命周期管理被称为 Hook 技术,源于其设计哲学与实现机制中“钩入”组件运行流程的特性。这一命名既是对传统编程中“钩子”(Hook)概念的延伸,也体现了 React 对函数式组件的逻辑注入能力。以下从多个维度解析其关联性&am…...

uv全功能更新:统一管理Python项目、工具、脚本和环境的终极解决方案

花下猫语:uv 项目自发布起就大受欢迎,目前 Github star 52.6 K,远超过它的同类竞品们。前不久,它的创始人在 X 上披露了一组惊人的数据:uv 曾占据了 PyPI 超过 20% 的流量,用户每天通过它发起约 4-5 亿次下…...

Redis 使用及命令操作

文章目录 一、基本命令二、redis 设置键的生存时间或过期时间三、SortSet 排序集合类型操作四、查看中文五、密码设置和查看密码的方法六、关于 Redis 的 database 相关基础七、查看内存占用 一、基本命令 # 查看版本 redis-cli --version 结果:redis-cli 8.0.0red…...

ROS2:自定义接口文件(无废话)

目录 一、ROS2接口文件定义二、创建接口文件步骤三、验证是否创建成功,以及自定义接口文件的使用 一、ROS2接口文件定义 ROS2中接口文件的格式根据通信的类型可以分为三种: 话题通信:.msg文件 常用格式为:[消息类型] 消息名称 #话…...

如何配置 VScode 断点调试Linux 工程代码

1、Windowns 安装WSL 环境 2、VSCode 中 安装 Romote-SSH扩展,进行连接到WSL下的Linux 环境 安装Romote-SSH成功后,在左下角显示 , 点击此图标 出现 “连接到WSL”, 进行连接 显示,则表明链接成功 3、 VSCode 安装 C/C扩展的调试…...

tinyrenderer笔记(Phong光照模型)

tinyrenderer个人代码仓库:tinyrenderer个人练习代码 前言 在前面的渲染中,我们读取模型的 diffuse 纹理,然后根据法线计算模型的颜色。这次我们引入一种新的光照模型—— Phong 光照模型,Phong 光照模型将光照分为了三类&#x…...

Twin Builder 中的电池等效电路模型仿真

电池单元热设计挑战 电池热管理的主要挑战之一是确保温度低于最大工作限值。较高的温度会导致效率降低、加速老化和潜在的安全隐患。工程师必须了解电池产生的热量,才能充分设计冷却系统。 了解和预测电池模块的热行为需要将电池的热损耗与电池单元的电气机械特性…...

SQLark可以支持PostgreSQL了,有哪些新功能?

SQLark(百灵连接)是一款国产的数据库开发和管理工具,用于快速查询、创建和管理不同类型的数据库系统,支持达梦、Oracle 和 MySQL 数据库。 最新发布的 SQLark V3.4 版本新增了对 PostgreSQL 数据库的支持。我试用了一下&#xff…...

Redis 7.0中5种新特性及实战应用

Redis 7.0引入了多项革命性的新特性,不仅在性能和可靠性方面有所提升,更在功能和使用体验上有了质的飞跃。本文将介绍Redis 7.0的五大关键新特性,可以根据实际情况利用Redis 7.0的强大功能,构建更高效、更可靠的应用系统。 特性一…...

游戏如何应对AssetStudio解包工具

「游戏解包」是指将游戏文件中被压缩或加密的资源提取出来,通过解包工具对资源进行修改、查看或导出。这个过程通常涉及到将游戏客户端中的数据包进行解压,故称为“解包”。 游戏的资源文件包含代码、图片、视频、音频等重要内容。一旦被解密&#xff0…...

UE5 渲染思路笔记(角色)

参考示例 首先是怎么做到辉光只有部分有而整体没有的 使用的是Bloom内的阈值,控制光的溢光量 Threshold(阈值):这个参数决定了图像中哪些像素会参与泛光计算。只有那些亮度超过阈值的像素才会触发泛光效果。阈值越低,更多的像素会…...

Sublime Text快速搭建Lua语言运行环境

第一步 先去Sublime Text官网下载安装 Sublime Text - Text Editing, Done Right 第二步 下载lua编译运行程序 Lua - Joe DFs Builds 第三步 在Sublime Text中配置lua运行环境 {"cmd": ["D:/Lua/lua.exe", "$file"], "file_regex"…...

提示词的 嵌入空间优化

提示词的 嵌入空间优化 提示词的 嵌入空间优化的定义 提示词的嵌入空间优化,是指通过技术手段**调整提示词在低维向量空间(嵌入空间)**中的表示,使其更精准地捕捉语义信息、增强语义关联性,或适配特定任务需求,从而提升模型(如大语言模型)对提示词的理解与处理效果。…...

STM32--GPIO

教程 视频 博主教程 STM32系统结构图 GPIO GPIO(General Purpose Input/Output)是STM32内部的一种外设。 一个STM32芯片内存在多个GPIO外设,每个GPIO外设有16个引脚; 比如GPIOA:PA0~PA15; GPIOB:PB0~…...

npm下载插件无法更新package.json和package-lock.json文件的解决办法

经过多番查证,使用npm config ls查看相关配置等方式,最后发现全局的.npmrc文件的配置多写了globaltrue,去掉就好了 如果参数很多,不知道是哪个参数引起的,先只保留registryhttp://xxx/,试试下载&#xff0…...

ABAQUS三维CT重建插件CT2Model3D V2版本

插件介绍 CT2Model 3D V2.0插件采用Python 3.10研发,适配2024及以上版本的Abaqus软件,具备在Abaqus平台中基于CT断层扫描图像的三维重建功能,插件支持批量导入tif、tiff、png、jpg等格式的图像文件,推动了数字化建模技术与有限元…...

导入飞帆的网页为组件并注入数据驱动

飞帆制作的网页可以作为 Vue 2 组件导入到你自己的网页中使用。 这里我们来试一下。 并且将数据传入这个组件,驱动里面的仪表盘控件。 https://andi.cn/page/622177.html...

C语言的重要知识点☞static关键字

static译为"静态的",该关键字可以修饰以下内容: 修饰局部变量修饰全局变量修饰函数 在讲解static的具体作用前需要先知道"作用域"以及"生命周期"的概念: 作用域: 作用域是一个程序设计概念&#…...

unordered_map和unordered_set的设计

#pragma once #include"HashTable.h" namespace aqc {template<class K,class V,class HashHashFunc<K>>class unordered_map{public:struct MapKeyOfT{const K& operator()(const pair<K, V>& kv)//pair对象是const返回值也得是const{ret…...

Servlet--快速入门及HTTP概述

Servlet概述 Servlet&#xff1a;server applet,是用Java编写的服务器端程序&#xff0c;其主要功能在于交互式的浏览和修改数据,生成动态web内容,一般来说,Servlet是指实现了这个Servlet接口的类 在Java中&#xff0c;Servlet是用于创建动态Web内容的服务器端组件。 Servle…...

【LeetCode Hot100 | 每日刷题】二叉树的层序遍历

题目&#xff1a; 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]]示例 2&a…...

编码器型与解码器型语言模型的比较

编码器型与解码器型语言模型的比较 1. 引言 自然语言处理&#xff08;NLP&#xff09;领域近年来取得了革命性进展&#xff0c;这在很大程度上归功于基于Transformer架构的语言模型。在这一技术生态中&#xff0c;编码器型&#xff08;Encoder-only&#xff09;和解码器型&am…...

Java 函数式编程

函数式编程的意义 函数式编程理念强调函数纯粹性和不可变性&#xff0c;这有助于写出更稳定、更易测试的代码&#xff0c;尤其在并发环境下减少 bug lambda 表达式 import java.util.function.Function;public class Strategize {Function<String, String> getString …...

MySQL初阶:基础增删改查(CRUD)

创建&#xff08;Create&#xff09; 先创建一个表 1&#xff09;单独插入一条 insert into 表名 values &#xff08;列名 类型&#xff09;...&#xff1b; 插入的记录要和表一开始创建记录的类型&#xff0c;个数&#xff0c;结构一样。 如果不一样&#xff0c;就会报错。…...