以太网实战AD采集上传上位机——FPGA学习笔记27
一、设计目标
使用FPGA实现AD模块驱动采集模拟电压,通过以太网上传到电脑上位机。
二、框架设计
数据位宽转换模块(ad_10bit_to_16bit):为了方便数据传输,数据位宽转换模块实现了将十位的 AD 数据转换成十六位,并且为了异步 FIFO 传输将高八位和低八位交换然后传输给数据封装模块。
开始传输模块(start_transfer_ctrl):该模块接收上位机发送的命令来判断是否开启传输以及使用那个通道传输。
数据封装模块(img_data_pkt):该模块调用异步 FIFO 将十六位的 AD 数据转换为传输给以太网部分的八位 UDP 数据,并且控制一包数据的大小和以太网 UDP 开始发送信号。
(1)开始传输模块 start_transfer_ctrl
module start_transfer_ctrl(input clk , //时钟信号input rst_n , //复位信号,低电平有效input udp_rec_pkt_done , //UDP单包数据接收完成信号 input udp_rec_en , //UDP接收的数据使能信号input [7 :0] udp_rec_data , //UDP接收的数据 input [15:0] udp_rec_byte_num , //UDP接收到的字节数 output reg [1:0] ctrl , output reg transfer_flag //图像开始传输标志,1:开始传输 0:停止传输
); //parameter define
parameter START_1 = 8'd1; //通道一开始命令
parameter STOP = 8'd0; //停止命令
parameter START_2 = 8'd2; //通道二开始命令//解析接收到的数据
always @(posedge clk or negedge rst_n) beginif (!rst_n) begintransfer_flag <= 1'b0;endelse if (udp_rec_pkt_done && udp_rec_byte_num == 1'b1)beginif (udp_rec_data == START_1) begintransfer_flag <= 1'b1;ctrl <= 2'b01;endelse if (udp_rec_data == START_2) begintransfer_flag <= 1'b1;ctrl <= 2'b10;end else if (udp_rec_data == STOP) begintransfer_flag <= 1'b0;ctrl <= 2'b00;end else begintransfer_flag <= 1'b0;ctrl <= 2'b00;endend
endendmodule
(2)开始传输模块 start_transfer_ctrl
module ad_10bit_to_16bit(input clk ,input rst_n ,input [1:0] sel ,//控制命令input [9:0] ad_in1 ,//通道一数据input [9:0] ad_in2 ,//通道二数据output reg [15:0] ad_out //输出数据
);//wire define
wire [9:0]s_ad_in1;
wire [9:0]s_ad_in2;//十位扩展为十六位
always @(posedge clk or negedge rst_n) beginif(!rst_n) beginad_out <= 16'd0;endelse if( sel == 2'b01) beginad_out<={6'd0,ad_in1};//这样补0为了适应上位机endelse if( sel == 2'b10) beginad_out<={6'd0,ad_in2};//endelse beginad_out <= 16'd0;end
endendmodule
(3)数据封装模块 img_data_pkt:
(4)UDP顶层修改
主要修改UDP顶层UDP协议接口,对ICMP以及ARP部分进行保留
module eth_top(input sys_rst_n , //系统复位信号,低电平有效 input clk_200m ,output gmii_rx_clk ,output gmii_tx_clk ,//PL以太网RGMII接口 //inputinput eth_rxc , //RGMII接收数据时钟input eth_rx_ctl , //RGMII输入数据有效信号input [3:0] eth_rxd , //RGMII输入数据//outputoutput eth_txc , //RGMII发送数据时钟 output eth_tx_ctl , //RGMII输出数据有效信号output [3:0] eth_txd , //RGMII输出数据 //UDP接口input udp_tx_start_en , //UDP发送开始使能信号 input [7:0] udp_tx_data , //UDP待发送数据input [15:0] udp_tx_byte_num , //UDP发送的有效字节数 单位:byte output udp_rec_pkt_done , //UDP单包数据接收完成信号 output udp_tx_done , //UDP发送完成信号 output udp_tx_req , //UDP读数据请求信号output udp_rec_en , //UDP接收的数据使能信号output [7:0] udp_rec_data , //UDP接收的数据output [15:0] udp_rec_byte_num //UDP接收的有效字节数 单位:byte);//parameter define
parameter BOARD_MAC = 48'h00_11_22_33_44_55; //开发板MAC地址 00-11-22-33-44-55
parameter BOARD_IP = {8'd192,8'd168,8'd1,8'd10}; //开发板IP地址 192.168.1.10
parameter DES_MAC = 48'hff_ff_ff_ff_ff_ff; //目的MAC地址 ff_ff_ff_ff_ff_ff
parameter DES_IP = {8'd192,8'd168,8'd1,8'd102}; //目的IP地址 192.168.1.102
parameter IDELAY_VALUE = 15; //输入数据IO延时 (如果为n,表示延时n*78ps) //wire define
// wire clk_200m ; //用于IO延时的时钟 // wire gmii_rx_clk ; //GMII接收时钟
wire gmii_rx_dv ; //GMII接收数据有效信号
wire [7:0] gmii_rxd ; //GMII接收数据
// wire gmii_tx_clk ; //GMII发送时钟
wire gmii_tx_en ; //GMII发送数据使能信号
wire [7:0] gmii_txd ; //GMII发送数据 //ARP信号
wire arp_gmii_tx_en ; //ARP GMII输出数据有效信号
wire [7:0] arp_gmii_txd ; //ARP GMII输出数据
wire arp_rx_done ; //ARP接收完成信号
wire arp_rx_type ; //ARP接收类型 0:请求 1:应答
wire [47:0] src_mac ; //接收到目的MAC地址
wire [31:0] src_ip ; //接收到目的IP地址
wire arp_tx_en ; //ARP发送使能信号
wire arp_tx_type ; //ARP发送类型 0:请求 1:应答
wire [47:0] des_mac ; //发送的目标MAC地址
wire [31:0] des_ip ; //发送的目标IP地址
wire arp_tx_done ; //ARP发送完成信号//ICMP信号
wire icmp_gmii_tx_en ; //ICMP GMII输出数据有效信号
wire [7:0] icmp_gmii_txd ; //ICMP GMII输出数据
wire icmp_rec_pkt_done ; //ICMP单包数据接收完成信号
wire icmp_rec_en ; //ICMP接收的数据使能信号
wire [ 7:0] icmp_rec_data ; //ICMP接收的数据
wire [15:0] icmp_rec_byte_num ; //ICMP接收的有效字节数 单位:byte
wire [15:0] icmp_tx_byte_num ; //ICMP发送的有效字节数 单位:byte
wire icmp_tx_done ; //ICMP发送完成信号
wire icmp_tx_req ; //ICMP读数据请求信号
wire [ 7:0] icmp_tx_data ; //ICMP待发送数据
wire icmp_tx_start_en ; //ICMP发送开始使能信号//UDP信号
wire udp_gmii_tx_en ; //UDP GMII输出数据有效信号
wire [7:0] udp_gmii_txd ; //UDP GMII输出数据
// wire udp_rec_pkt_done ; //UDP单包数据接收完成信号
// wire udp_rec_en ; //UDP接收的数据使能信号
// wire [ 7:0] udp_rec_data ; //UDP接收的数据
// wire [15:0] udp_rec_byte_num ; //UDP接收的有效字节数 单位:byte
// wire [15:0] udp_tx_byte_num ; //UDP发送的有效字节数 单位:byte
// wire udp_tx_done ; //UDP发送完成信号
// wire udp_tx_req ; //UDP读数据请求信号
// wire [ 7:0] udp_tx_data ; //UDP待发送数据
// wire udp_tx_start_en ; //UDP发送开始使能信号wire [7:0] rec_data ; //FIFO写入数据
wire rec_en ; //FIFO写使能
wire tx_req ; //FIFO读使能
wire [7:0] tx_data ; //FIFO读出数据assign icmp_tx_start_en = icmp_rec_pkt_done ; //ICMP 接收端结束标志,作为 ICMP发送端开始标志
assign icmp_tx_byte_num = icmp_rec_byte_num ; //ICMP 接收端数据个数,作为 ICMP发送端发送数据 // assign udp_tx_start_en = udp_rec_pkt_done ; //UDP 接收端结束标志,作为 UDP发送开始使能信号
// assign udp_tx_byte_num = udp_rec_byte_num ; //UDP 接收端数据个数,作为 UDP发送端发送数据个数assign des_mac = src_mac ; //ARP 接收到的 源MAC,作为 ICMP\UDP 目的MAC,实际为电脑端MAC
assign des_ip = src_ip ; //ARP 接收到的 源IP ,作为 ICMP\UDP 目的IP ,实际为电脑端IP//数据位于异步FIFO之中,如需单独使用一侧功能,可以修改FIFO数据//需要注意写入有效数据数量要与此处相同,一定要注意 数据个数与FIFO读出数据对齐!!!!!!! // //MMCM/PLL 产生200Mhz时钟--> gmii2rgmii
// clk_wiz_0 u_clk_wiz_0
// (
// .clk_out1 (clk_200m ), // output clk_out1
// .reset (~sys_rst_n ), // input reset
// .locked (locked ), // output locked
// .clk_in1 (eth_rxc ) // PHY侧提供eth_rxc时钟125Mhz
// ); //GMII接口转RGMII接口
gmii_to_rgmii
#(.IDELAY_VALUE (IDELAY_VALUE )
)
u_gmii_to_rgmii( .idelay_clk (clk_200m ), //IDELAY时钟//以太网GMII接口 .gmii_rx_clk (gmii_rx_clk ), //GMII接收时钟.gmii_rx_dv (gmii_rx_dv ), //GMII接收数据有效信号.gmii_rxd (gmii_rxd ), //GMII接收数据.gmii_tx_clk (gmii_tx_clk ), //GMII发送时钟.gmii_tx_en (gmii_tx_en ), //GMII发送数据使能信号.gmii_txd (gmii_txd ), //GMII发送数据 //以太网RGMII接口 .rgmii_rxc (eth_rxc ), //RGMII接收时钟.rgmii_rx_ctl (eth_rx_ctl ), //RGMII接收数据控制信号.rgmii_rxd (eth_rxd ), //RGMII接收数据.rgmii_txc (eth_txc ), //RGMII发送时钟 .rgmii_tx_ctl (eth_tx_ctl ), //RGMII发送数据控制信号.rgmii_txd (eth_txd ) //RGMII发送数据
);//ARP通信
arp
#(.BOARD_MAC (BOARD_MAC ), //参数例化.BOARD_IP (BOARD_IP ),.DES_MAC (DES_MAC ),.DES_IP (DES_IP )
)
u_arp( .rst_n (sys_rst_n ), //复位信号,低电平有效//GMII接口 //input.gmii_rx_clk (gmii_rx_clk ), //GMII接收数据时钟.gmii_rx_dv (gmii_rx_dv ), //GMII输入数据有效信号.gmii_rxd (gmii_rxd ), //GMII输入数据.gmii_tx_clk (gmii_tx_clk ), //GMII发送数据时钟//output.gmii_tx_en (arp_gmii_tx_en ), //GMII输出数据有效信号.gmii_txd (arp_gmii_txd ), //GMII输出数据 //用户接口 //output.arp_rx_done (arp_rx_done ), //ARP接收完成信号.arp_rx_type (arp_rx_type ), //ARP接收类型 0:请求 1:应答.src_mac (src_mac ), //接收到目的MAC地址.src_ip (src_ip ), //接收到目的IP地址 //input .arp_tx_en (arp_tx_en ), //ARP发送使能信号.arp_tx_type (arp_tx_type ), //ARP发送类型 0:请求 1:应答.des_mac (des_mac ), //发送的目标MAC地址.des_ip (des_ip ), //发送的目标IP地址//output.tx_done (arp_tx_done ) //以太网发送完成信号
); //ICMP通信
icmp
#(.BOARD_MAC (BOARD_MAC ), //参数例化.BOARD_IP (BOARD_IP ),.DES_MAC (DES_MAC ),.DES_IP (DES_IP )
)
u_icmp(.rst_n (sys_rst_n ), //复位信号,低电平有效//GMII接口//input.gmii_rx_clk (gmii_rx_clk ), //GMII接收数据时钟 .gmii_rx_dv (gmii_rx_dv ), //GMII输入数据有效信号 .gmii_rxd (gmii_rxd ), //GMII输入数据 .gmii_tx_clk (gmii_tx_clk ), //GMII发送数据时钟//output.gmii_tx_en (icmp_gmii_tx_en ), //GMII输出数据有效信号 .gmii_txd (icmp_gmii_txd ), //GMII输出数据//用户接口//output.rec_pkt_done (icmp_rec_pkt_done ), //以太网单包数据接收完成信号 .rec_en (icmp_rec_en ), //以太网接收的数据使能信号 .rec_data (icmp_rec_data ), //以太网接收的数据 .rec_byte_num (icmp_rec_byte_num ), //以太网接收的有效字节数 单位:byte //input.tx_start_en (icmp_tx_start_en ), //以太网开始发送信号 .tx_data (icmp_tx_data ), //以太网待发送数据 .tx_byte_num (icmp_tx_byte_num ), //以太网发送的有效字节数 单位:byte.des_mac (des_mac ), //发送的目标MAC地址.des_ip (des_ip ), //发送的目标IP地址 //output.tx_done (icmp_tx_done ), //以太网发送完成信号 .tx_req (icmp_tx_req ) //读数据请求信号
); //UDP通信
udp
#(.BOARD_MAC (BOARD_MAC ), //参数例化.BOARD_IP (BOARD_IP ),.DES_MAC (DES_MAC ),.DES_IP (DES_IP )
)
u_udp(.rst_n (sys_rst_n ), //复位信号,低电平有效//GMII接口//input.gmii_rx_clk (gmii_rx_clk ), //GMII接收数据时钟 .gmii_rx_dv (gmii_rx_dv ), //GMII输入数据有效信号.gmii_rxd (gmii_rxd ), //GMII输入数据.gmii_tx_clk (gmii_tx_clk ), //GMII发送数据时钟 //output .gmii_tx_en (udp_gmii_tx_en ), //GMII输出数据有效信号.gmii_txd (udp_gmii_txd ), //GMII输出数据 //用户接口//outpur.rec_pkt_done (udp_rec_pkt_done ), //以太网单包数据接收完成信号 .rec_en (udp_rec_en ), //以太网接收的数据使能信号.rec_data (udp_rec_data ), //以太网接收的数据 .rec_byte_num (udp_rec_byte_num ), //以太网接收的有效字节数 单位:byte //input.tx_start_en (udp_tx_start_en ), //以太网开始发送信号 .tx_data (udp_tx_data ), //以太网待发送数据 .tx_byte_num (udp_tx_byte_num ), //以太网发送的有效字节数 单位:byte .des_mac (des_mac ), //发送的目标MAC地址 .des_ip (des_ip ), //发送的目标IP地址 //output .tx_done (udp_tx_done ), //以太网发送完成信号 .tx_req (udp_tx_req ) //读数据请求信号
); //异步FIFO,实际做同步FIFO使用
async_fifo_2048x8b u_async_fifo_2048x8b (//input.rst (~sys_rst_n ), //input wire rst.wr_clk (gmii_rx_clk ), //input wire wr_clk.rd_clk (gmii_rx_clk ), //input wire rd_clk.din (rec_data ), //input wire [7 : 0] din.wr_en (rec_en ), //input wire wr_en.rd_en (tx_req ), //input wire rd_en//output.dout (tx_data ), //output wire [7 : 0] dout.full ( ), //output wire full.empty ( ) //output wire empty
);// //预留调试ILA
// ila_0 ila_0_fifo (
// .clk (gmii_rx_clk ), // input wire clk// .probe0 (rec_en ), // input wire [0:0] probe0
// .probe1 (rec_data ), // input wire [7:0] probe1
// .probe2 (tx_req ), // input wire [0:0] probe2
// .probe3 (tx_data ) // input wire [7:0] probe3
// );//以太网控制模块
eth_ctrl u_eth_ctrl(//input.clk (gmii_rx_clk ), //时钟.rst_n (sys_rst_n ), //系统复位信号,低电平有效 //ARP相关端口信号 //input.arp_rx_done (arp_rx_done ), //ARP接收完成信号.arp_rx_type (arp_rx_type ), //ARP接收类型 0:请求 1:应答.arp_tx_done (arp_tx_done ), //ARP发送完成信号.arp_gmii_tx_en (arp_gmii_tx_en ), //ARP GMII输出数据有效信号 .arp_gmii_txd (arp_gmii_txd ), //ARP GMII输出数据//output.arp_tx_en (arp_tx_en ), //ARP发送使能信号.arp_tx_type (arp_tx_type ), //ARP发送类型 0:请求 1:应答//ICMP相关端口信号//input.icmp_tx_start_en (icmp_tx_start_en ), //ICMP开始发送信号.icmp_tx_done (icmp_tx_done ), //ICMP发送完成信号.icmp_gmii_tx_en (icmp_gmii_tx_en ), //ICMP GMII输出数据有效信号 .icmp_gmii_txd (icmp_gmii_txd ), //ICMP GMII输出数据 //ICMP fifo接口信号//input.icmp_rec_en (icmp_rec_en ), //ICMP接收的数据使能信号.icmp_rec_data (icmp_rec_data ), //ICMP接收的数据.icmp_tx_req (icmp_tx_req ), //ICMP读数据请求信号//output.icmp_tx_data (icmp_tx_data ), //ICMP待发送数据//UDP相关端口信号//input.udp_tx_start_en (udp_tx_start_en ), //UDP开始发送信号.udp_tx_done (udp_tx_done ), //UDP发送完成信号 .udp_gmii_tx_en (udp_gmii_tx_en ), //UDP GMII输出数据有效信号 .udp_gmii_txd (udp_gmii_txd ), //UDP GMII输出数据 //UDP fifo接口信号//input.udp_rec_data (udp_rec_data ), //UDP接收的数据 ---> UDP要发送的数据.udp_rec_en (udp_rec_en ), //UDP接收的数据使能信号 .udp_tx_req (udp_tx_req ), //UDP读数据请求信号 //output .udp_tx_data ( ), //UDP待发送数据 //fifo接口信号//output.rec_data (rec_data ), //待发送的数据 .rec_en (rec_en ), //读数据请求信号 .tx_req (tx_req ), //接收的数据使能信号//input.tx_data (tx_data ), //接收的数据//GMII发送引脚 //output.gmii_tx_en (gmii_tx_en ), //GMII输出数据有效信号 .gmii_txd (gmii_txd ) //GMII输出数据
); endmodule
三、代码架构
四、下载测试
1、ping指令&ARP
2、UDP数据上报
正弦波
方波
三角波
多频音波
五、源码获取工程移植,请后台私信
相关文章:

以太网实战AD采集上传上位机——FPGA学习笔记27
一、设计目标 使用FPGA实现AD模块驱动采集模拟电压,通过以太网上传到电脑上位机。 二、框架设计 数据位宽转换模块(ad_10bit_to_16bit):为了方便数据传输,数据位宽转换模块实现了将十位的 AD 数据转换成十六位&#…...

Python数据分析案例70——基于神经网络的时间序列预测(滞后性的效果,预测中存在的问题)
背景 这篇文章可以说是基于 现代的一些神经网络的方法去做时间序列预测的一个介绍科普,也可以说是一个各种模型对比的案例,但也会谈一谈自己做了这么久关于神经网络的时间序列预测的论文,其中一些常见的模式及它们存在的问题以及效果&#x…...

vue+高德API搭建前端Echarts图表页面
利用vue搭建Echarts图表页面,在搭建Echarts图表中,如果搭建地理地形图需要准备一些额外的文件,地理json文件和js文件,js文件目前在网上只能找省一级的,json文件有对应的省市县,js文件和json文件对应的也是不…...

提示词工程:解锁AI潜能的关键技术
什么是提示词工程? 提示词工程(Prompt Engineering)是一门新兴的技术领域,专注于如何设计和优化与生成式人工智能的交互提示,以获得最佳的输出结果。它是连接人类意图和AI能力的桥梁,通过精心设计的文本输入来引导AI模型产生准确、相关且有价值的输出。 核心概念 提示(…...

Python制作简易PDF查看工具PDFViewerV1.0
PDFViewer PDF浏览工具,Python自制PDF查看工具,可实现基本翻页浏览功能,其它功能在进一步开发完善当中,如果有想一起开发的朋友,可以留言。本软件完全免费,自由使用。 软件界面简洁,有菜单栏、…...

嵌入式硬件篇---基本组合逻辑电路
文章目录 前言基本逻辑门电路1.与门(AND Gate)2.或门(OR Gate)3.非门(NOT Gate)4.与非门(NAND Gate)5.或非门(NOR Gate)6.异或门(XOR Gate&#x…...

CSRF攻击XSS攻击
概述 在 HTML 中,<a>, <form>, <img>, <script>, <iframe>, <link> 等标签以及 Ajax 都可以指向一个资源地址,而所谓的跨域请求就是指:当前发起请求的域与该请求指向的资源所在的域不一样。这里的域指…...

ARM学习(42)CortexM3/M4 MPU配置
笔者之前学习过CortexR5的MPU配置,现在学习一下CortexM3/M4 MPU配置 1、背景介绍 笔者在工作中遇到NXP MPU在访问异常地址时,就会出现总线挂死,所以需要MPU抓住异常,就需要配置MPU。具体背景情况可以参考ARM学习(41)NXP MCU总线挂死,CPU could not be halted以及无法连…...
opencv3.4 ffmpeg3.4 arm-linux 交叉编译
一些依赖安装: sudo apt-get install pkg-config libgtk2.0-dev libavcodec-dev libavformat-dev libswscale-dev 交叉编译工具链准备:gcc-linaro-6.3.1 1、下载 https://github.com/FFmpeg/FFmpeg 解压后新建目录:Fmpeg-n3.4.13/ffmpeg…...

spring的事物管理的认知
事物 它是一个原子操作要么全部不执行,要么全部执行成功,如果有一个失败也会撤销,它保证用户每一次的操作都是可靠的,即使时出现了错误也不至于破坏数据的完整性 它包含了四种特性: 原子性:保证事物要么…...

麒麟LINUX V10SP3 2401安装ORACLE 12.2.1 runInstaller直接报UNZIP格式不对
好久没有安装ORACLE了,一般都是RHEL上安装得比较多,这不,现在大家都是选择国产操作系统来安装数据库了,以前在龙蜥,欧拉,麒麟上也安装过,都没有问题,想来在麒麟LINUX v10sp3 2401上面…...

华为HuaweiCloudStack(一)介绍与架构
本文简单介绍了华为HCS私有云解决方案,并从下至上介绍HCS的整体架构,部署架构、部署方式等内容。 目录 HCS简介 HCS架构 纵向结构 ?管理平台类型 HCS节点类型 FusionSphere OpenStack CPS ServiceOM SC 运营面 OC 运维面 HCS部署架构 regi…...

微服务学习:基础理论
一、微服务和应用现代化 1、时代的浪潮,企业的机遇和挑战 在互联网化数字化智能化全球化的当今社会,IT行业也面临新的挑战: 【快】业务需求如“滔滔江水连绵不绝”,企业需要更快的交付【变】林子大了,百色用户&…...
C++实现设计模式---迭代器模式 (Iterator)
迭代器模式 (Iterator) 迭代器模式 是一种行为型设计模式,它提供了一种方法,顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。 意图 提供一种方法,可以顺序访问一个容器对象中的元素,而无需暴露其…...

海康工业相机的应用部署不是简简单单!?
作者:SkyXZ CSDN:SkyXZ~-CSDN博客 博客园:SkyXZ - 博客园 笔者使用的设备及环境:WSL2-Ubuntu22.04MV-CS016-10UC 不会吧?不会吧?不会还有人拿到海康工业相机还是一脸懵叭?不会还有人…...

Windows电脑安装File Browser与cpolar轻松搭建本地云盘
文章目录 前言1.下载安装File Browser2.启动访问File Browser3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 无论是个人用户还是企业团队,都希望能够有一个高效、安全的解决方案来…...

mac配置 iTerm2 使用lrzsz与服务器传输文件
mac配置 1. 安装支持rz和sz命令的lrzsz brew install lrzsz2. 下载iterm2-send-zmodem.sh和iterm2-recv-zmodem.sh两个脚本 # 克隆仓库 git clone https://github.com/aikuyun/iterm2-zmodem ~/iterm2-zmodem# 进入到仓库目录 cd ~/iterm2-zmodem# 设置脚本文件可执行权限 c…...

【HBuilderX 中 Git 的使用】
目录: 一:安装必要的版本控制工具二:把Github上的项目克隆到本地三:将本地的项目上传到Github上 一:安装必要的版本控制工具 1️⃣ 安装 TortoiseGit 工具,下载地址:https://tortoisegit.org/do…...

Golang结合MySQL和DuckDB提高查询性能
要在Golang中组合MySQL和DuckDB以提高查询性能,请考虑使用混合查询执行方法。这种方法利用了MySQL强大的事务管理和DuckDB闪电般的分析处理能力。本文介绍如何充分利用两者的方法。 各取所长 用MySQL处理事务,用DuckDB处理分析 MySQL应该处理常规的INS…...

学技术学英语:TCP的三次握手和四次挥手
单词 汉语意思 音标 acknowledge 承认,确认 /əkˈnɒl.ɪdʒ/ acknowledgment 确认,承认 /əkˈnɒl.ɪdʒ.mənt/ duplex 双向的 /ˈdjuː.pleks/ establish 建立 /ɪˈstb.lɪʃ/ handshake 握手,握手协议 /ˈhnd.ʃeɪk…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...

Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...

android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...