8路CXP相机采集系统介绍
8xCXP相机采集系统介绍
目录
1 系统概述 4
2 硬件架构 5
2.1 FPGA处理单元 5
2.2 CXP接口层 6
2.3 CXP相机说明与使用要求 7
2.4 SSI控制器板 8
3 FPGA方案 9
3.1 FPGA实现 9
3.2 Block Design说明 10
4 软件方案 14
4.1 嵌入式层 14
4.2 上位机软件(C#) 14
4.2.1 启动与相机扫描 15
4.2.2 参数配置 15
4.2.3 数据可视化 16
图 1 系统整体架构 4
图 2 硬件连接示意图 5
图 3 ALINX ZU19EG FPGA板卡 5
图 4 FMC-CXP-4R 板卡 6
图 5 a2A2448-210cm 机械结构 7
图 6 6芯GPIO线缆 7
图 7 485接线图 8
图 8 SSI时序图 8
图 9 FPGA数据流 9
图 10 ISP处理 10
图 11 核心模块 11
图 12 cxp_phy Block Design 12
图 13 cxp host图像输出端口 12
图 14 cxp rx Block Design 13
图 15 Rx Block Design 13
图 16 ssi数据输出Block Design 14
图 17 C# 范例界面图 15
图 18 采集图像演示 17
系统概述
✅ 应用需求:
- 连接控制8路CXP 单lane 相机,支持POE,相机工作在外触发模式;
- 可以通过网络接口监控CXP相机图像(只监控最新图像),传输控制指令,修改相机参数;
- 支持3路SSI接口;
根据上述需求,本系统通过双CXP FMC子卡接入8台CoaXPress(CXP)工业相机,利用Xilinx ZYNQ SoC芯片实现高速图像采集、传输及上位机实时显示。系统采用软硬件协同设计,支持实时数据流处理与灵活的上位机控制,可广泛应用于机器视觉、工业检测等高带宽场景。
图 1 系统整体架构
特色与优势:
✅ 多通道高速采集:支持 8台相机同时工作,确保大规模采集的稳定性。
✅ 智能参数管理:匹配不同品牌相机的参数配置。
✅ 动态缓存分配:根据实际连接的相机数和参数,动态调整Rx存储,提高内存利用率。
✅ 实时数据监控:图像界面实时显示采集数据,同时可监控可用帧数,避免缓存溢出。
✅ 高效数据传输:结合 DDR4+AXIS总线,保证高吞吐量的稳定采集。
✅ 多种触发模式支持:适应不同应用场景,如工业检测、航空影像采集、武器测试等。
硬件架构
图 2 硬件连接示意图
FPGA处理单元
利用现有商用FPGA主控板,搭载外设完成系统设计。
Z19开发板主要由 ZU19EG + 4 个 DDR4+DDR4 SODIMM + eMMC +2 个 QSPI FLASH 构成。主芯片采用 Xilinx 公司的 Zynq UltraScale+ MPSoCs 系列的芯片,型号为 XCZU19EG- -2FFVC1760I。ZU19EG 芯片可分成处理器系统部分 Processor System(PS)和可编程逻辑 部分 Programmable Logic(PL)。 在 ZU19EG 芯片的 PS 端和 PL 端分别挂了 4 片 DDR4 和 1 个 260 脚 DDR4 SODIMM 卡槽,PS 端的每片 DDR4 容量高达 2GB,使得 ARM 系统和 FPGA 系统能独立处理和存储的数据的功能。PS 端的 32GB eMMC FLASH 存储芯片和 2 片 256Mb 的 QSPI FLASH 用来静态存储 MPSoCs 的操作系统、文件系统及用户数据。
该板卡有如下特点适合我们的应用场景:
- 2个FMC HPC可以用于CXP HOST FMC子卡的连接,实现CXP相机的采集和控制;
- 千兆以太网:提供高速稳定的网络连接,确保大数据量的快速传输,适合实时数据处理需求。
- DDR4内存:增强数据处理能力,满足复杂运算和大容量数据处理的需求。
- 2路485可以方便扩展外设;
CXP接口层
图 4 FMC-CXP-4R 板卡
2块FMC子卡提供8路CXP-12接口,单链路带宽达12.5 Gbps,支持PoCXP供电,支持1.25,2.5,3.125,5,6.25,10,12.5 Gbps速率。FMC-CXP-4R 子卡特性如下:
- HPC FMC连接器,使用FMC高密度连接器,符合VITA 57.1标准;
- Equalizer/Driver均衡器与驱动器,接收来自相机的高速downlink信号,发送来组FMC IO的低速控制信号;
- LED,每个通道配置1个双色LED,可以通过FMC IO实现R,G颜色任意组合;
- EEPROM,使用I2C接口的MT24C02 EEPROM,256Bytes容量,可以用于存储用户数据;
- 24V DC Power, 24V DC电源电路,可以接受来自FMC的12V或者来自外部电源的12V供电电源,为power on cable功能提供DC电源,理论CXP每通道提供最大13W输出功率;
- Power monitor,每路CoaXPress提供1路电流、电压监测电路,当电流超过门限后,会通过alert 端口向外发出警告;
- HDBNC, 根据CoaXPress标准,子板使用MircroBNC连接器连接Device设备;
- SMA,双向数字输入输出接口,通常用于触发信号的路由;
名称 | 别名 | 方向 | 电气 | 接头 | 宽度 | 描述 |
CH0-CH3 | CXP | 双向 | 24V,12.5Gbps | Micro BNC | 4 | CoaXPress 物理通道,支持POE |
Trigger | 触发 | 双向 | 1.8V-3.3V | SMA | 1 | 数字触发信号 |
CXP相机说明与使用要求
参考 a2A2448-210cm | Basler Product Documentation
图 6 6芯GPIO线缆
相机会工作在外部触发模式,触发信号从Line 1/2/3 输入,注意接线时Line 1 有独立的GND。
SSI控制器板
SSI 控制板由ZYNQ7020 作为主控,通过485接口与Z19板卡完成通讯,Z19板卡上使用485接口1(A1 B1 GND),在SSI开发板上,预留好了一个RS-485接口,使用导线按照图7所示连接。
设计通过RS485接口接收数据,经UART协议解析后转换为AXI4 Stream数据流,在第一次握手信号成功后将数据转换为源同步的方式将数据从TX1发送,每次数据会在同步时钟的上升沿改变如图8所示,第二次握手成功后数据也会按照源同步的方式从TX3输出,其他以此类推,数据是在奇数路输出,同步时钟在偶数路输出,总共能够输出4路数据与4路时钟
考虑到SSI板上没有PL端使用的按键,因此每次接收到数据32‘h55555555会使SSI板上复位,之后每一路源同步数据会转换成RS-422协议由每一路的Y和Z口输出。
FPGA方案
FPGA实现
图 9 FPGA数据流
- 图像采集部分(左侧)
如图7所示为本系统的FPGA数据流的示意图。系统使用了8个相机(Camera1 ~ Camera8)进行图像采集,每4个相机的数据分别由一块CXP FMC采集卡接收。采用CoaXPress(CXP)高速接口,保证数据的高带宽传输。CXP FMC Card 1 连接 Camera1 ~ Camera4,负责接收这4个相机的数据流。CXP FMC Card 2 连接 Camera5 ~ Camera8,负责接收这4个相机的数据流。这两个FMC采集卡分别通过CXP链路,将数据传输到下一级数据处理模块。
- 数据解析部分(中间)
每块FMC采集卡的数据先通过External PHY,完成CXP链路的物理层解析。External PHY 主要用于信号处理、数据恢复,并将物理层数据转换为可供CXP Host解析的格式。
- CXP Host协议解析
External PHY 之后,数据进入CXP Host协议解析模块,用于解析相机数据和相机信息(如帧头、状态等)。使用Hello-FPGA的CXP HOST IP Core 接收CXP相机的视频数据、发送主机的控制信号,控制信号的发送通过AXI Lite 接口完成,适配数据的接收通过AXI Stream Video格式接收。如图8所示,stream数据一分为二,一份送给PS作为监控使用,一份送给ISP 模块进行后续处理,ISP将处理结果通过DMA存储到PS DDR内存,然后软件可以读取计算结果,该计算结果与VIDEO数据一一对应,存在同步关系。
- 数据流处理部分(右侧)
AXIS数据流拆分,解析后的数据被划分为8路AXIS数据流(Stream 1 ~ Stream 8),每路数据流分别对应一个相机。这些数据流由Rx(数据接收引擎)模块处理,确保数据的稳定传输。Stream 1 Rx 处理 Camera1 数据流,Stream 2 Rx 处理 Camera2 数据流...(依次类推)。每个Rx独立工作,保证多通道数据的高效传输。经过Rx处理后的8路数据流被存储到ZYNQ PS端的DDR4中。DDR4作为高速缓存,保证数据不会因为带宽限制而丢失。存储的数据可用于进一步处理,如,直接传输到上位机进行显示或存储。
这里8路相机,每个相机大概分配不超过128MB的缓存,主要用于视频监控。8路计算结果合并成1路通过DMA存储到PS DDR内存,软件读取的时候按照存储顺序对计算结果机型划分。
图 10 ISP处理
Block Design说明
如图 11 所示,Block Design 的核心部分由 cxp_phy 和 cxp_rx 组成。其中,cxp_phy 负责 CXP 链路的物理层解析,包括信号处理和数据恢复,并将数据转换为标准的图像格式;cxp_rx 则对 cxp_phy 解析后的图像数据进行拆分和接收。
图 12 展示了 cxp_phy 的内部结构,主要由 ext_phy 和 cxp_host 组成:
- ext_phy 实现 CXP 物理层处理;
- cxp_host 负责 CXP 协议解析,并输出图像数据。
本设计采用两个 ext_phy 模块,实现八路 CXP 相机的输入。cxp_host 输出的 dma_data[511:0] 包含所有八路相机的数据,每个相机的数据位宽是64位。其中:
第1路相机数据:dma_data[63:0]
第2路相机数据:dma_data[127:64]
……
第8路相机数据:dma_data[511:448]
此外,数据流控制信号定义如下:
- dma_ready[7:0]:指示下游模块是否已准备好接收对应通道的数据。
- dma_valid[7:0]:表示当前时刻对应相机的数据是否有效。
- dma_sop[7:0](Start of Packet):标识新帧的起始,仅在帧的第一行首个像素时拉高。
- dma_eol[7:0](End of Line):标识一行数据的结束,在每行最后一个像素时拉高。
如图 14 所示,cxp_rx 内部通过 video_to_axis 模块,将八路图像数据拆分,并转换为 AXI Stream 格式。如果需要对某一路相机的数据进行图像处理,只需复制该通道的 AXI Stream 数据并送入图像处理模块。复制操作可通过简单的组合逻辑实现,只需在 Block Design 中添加复制模块,并分别连接至图像处理模块和原有模块。
cxp_rx 还包含 Rx,用于将接收到的图像数据缓存至 DDR,如图 15 所示。
如图 16 所示,ssi 数据输出部分的 Block Design 采用自定义的 axi_stream_generate 模块生成 AXI Stream 数据,并通过 axis_broadcaster 进行分流:
- 一路数据进入 axi_stream_FIFO,供上位机监测;
- 另一路通过 axis_to_uart 模块转换为串口数据,并通过 RS485 传输至 ssi 板卡。
在实际应用中,可将 axi_stream_generate 模块替换为用户的图像处理模块,确保处理后的图像参数输出符合 AXI Stream 格式,并连接至 axis_broadcaster 以实现数据分流。
软件方案
嵌入式层
嵌入PS的Linux系统驱动PL IP核,通过AXI总线控制Rx,实现内存到网络的数据搬运。嵌入式系统基于ZYNQ架构,PS端运行Linux系统,并包含相应的网络驱动。图像数据采集后,通过CXP Host模块解析并整理成AXIS数据流,随后传输至PS端的DDR4缓存区,等待上位机读取。
上位机软件(C#)
hello-fpga会提供C++/C# API接口,提供8个相机控制、显示的C# 范例,这里8路相机默认使用相同的配置,如果需要每个相机进行不同的配置,可以修改范例程序得到。
上位机软件基于C++/C#开发,主要包含设备管理、参数配置、实时显示及数据存储模块。上电后,上位机首先执行设备扫描,读取相机的设备信息。基于厂商提供的XML文件解析相机配置参数的地址和格式,并进行初始化配置。
在采集启动前,上位机会根据检测到的相机数量,动态分配 Rx 的缓存空间,并发送启动命令。采集过程中,上位机定期查询 Rx 的缓存状态,并从中读取数据,实时解码并显示在界面上。此外,界面右侧实时更新可用帧数,确保数据流畅显示,并支持用户参数调整和存储功能。
图 17 C# 范例界面图
启动与相机扫描
8个相机控制、显示的C# 范例如图9所示,上电后,软件首先执行 Scan Cameras 操作,以检测并识别系统中可用的CXP相机。扫描流程如下:上位机会向每个连接的相机发送查询命令,并从相机端读取一系列关键寄存器信息,如,厂商名称、型号、制造信息、固件版本等。
为了正确解析相机参数,上位机会根据不同厂商的XML配置文件解析相机的参数结构,获取XML文件中的寄存器地址映射,获取参数存储地址和数据格式。
根据扫描结果,动态创建相机实例,存储相机相关信息,以便后续参数配置和数据采集。
参数配置
在成功扫描到相机后,用户可以在右侧参数面板中配置相机的工作模式,参数包括:
- 图像尺寸
Image Width(ROI_X):设置横向分辨率。
Image Height(ROI_Y):设置纵向分辨率。
- 帧率控制
Acquisition Frame Rate:设置采集帧率(FPS),影响数据吞吐量。
- 触发模式
Trigger Source:选择触发信号源,如**软件触发、外部触发(IP Line0)**等。
- 曝光设置
Exposure Mode:设置曝光模式(自动/手动)。
Exposure Time(μs):手动模式下的曝光时间,单位为微秒。
- 图像增强
Camera Gain:调整增益,提高低亮度场景下的图像清晰度。
Black Level:设置黑电平,提高图像对比度。
- 采集模式
TakeContinueMode(连续模式):启用后,相机会持续采集数据,直到用户手动停止。
Trigger Mode(触发模式):仅在收到触发信号时采集图像。
数据可视化
在用户点击 Start 按钮后,系统进入正式的数据采集流程:
(1)动态分配Rx缓存
由于不同相机的分辨率、帧率可能不同,为了优化内存使用,上位机会根据读取扫描到的相机数,动态分配 Rx 缓存空间。计算每个相机的数据吞吐量,合理分配DDR4存储区域,避免溢出或带宽瓶颈。为每个相机创建独立的缓存队列,保证数据存储有序。
(2)实时数据传输、显示
如图10所示,为8个相机采集画面的截图(只装了两个镜头,其余相机机盖未打开显示为黑色画面)。上位机不断查询 Rx 缓存中的数据量,即当前可读取的帧数。当缓存中有新数据时,上位机会将其读取并进行解码,采集到的数据会通过图形界面显示,每个窗口对应一个相机的数据流。右侧“Available Frames”区域会动态显示当前可用帧数,帮助用户监测数据采集状态。
(3)数据停止与存储
当用户点击 Stop 按钮时,系统会: 停止向 Rx 发送新的采集请求。读取并存储剩余的缓存数据,确保数据完整性。释放动态分配的缓存空间,提高系统资源利用率。
图 18 采集图像演示
相关文章:
8路CXP相机采集系统介绍
8xCXP相机采集系统介绍 目录 1 系统概述 4 2 硬件架构 5 2.1 FPGA处理单元 5 2.2 CXP接口层 6 2.3 CXP相机说明与使用要求 7 2.4 SSI控制器板 8 3 FPGA方案 9 3.1 FPGA实现 9 3.2 Block Design说明 10 4 软件方案 14 4.1 嵌入式层 14 4.2 上位机软件(C…...
vue2前端日志数据存储,推荐(IndexedDB)
前言:首先,我得回忆一下IndexedDB的基本概念和用法,确保自己理解正确。IndexedDB是一个浏览器内置的数据库,允许存储大量结构化数据,支持事务和索引查询,适合需要离线存储的应用场景。 接下来,用…...
onedav一为导航批量自动化导入网址(完整教程)
OneNav作为一个功能强大的导航工具,支持后台管理、加密链接、浏览器书签批量导入等功能,能够帮助用户轻松打造专属的导航页面。今天,我将为大家详细介绍如何实现OneNav导航站的批量自动化导入网址。 1、建立要批量导入的表格 格局需要创建表格,表格的要求是一定要有需要,…...
Ubuntu Linux安装PyQt5并配置Qt Designer
一 安装 PyQt5 借助 apt 包管理器来安装 PyQt5 及其相关的开发工具: sudo apt install python3-pyqt5 pyqt5-dev-tools 假如报错, You might want to run apt --fix-broken install to correct these. 直接执行: sudo apt --fix-…...
无人机螺旋桨平衡标准
螺旋桨平衡是确保无人机(UAV)平稳运行、可靠性和使用寿命的关键过程。螺旋桨的不平衡会导致振动、噪音,并加速关键部件的磨损,从而对飞行性能产生负面影响。 ISO 21940-11:2016标准为旋翼平衡提供了一个广泛引用的框架,定义了可接受的不平衡…...
基于MCP协议的多模态模型优化在医疗3D打印精密人工关节制造中的研究
一、引言 1.1 研究背景与意义 在全球人口老龄化趋势愈发明显的当下,诸如骨关节炎、类风湿性关节炎这类关节疾病的发病率不断攀升,进而使得人工关节置换手术的需求呈现出激增态势。人工关节置换手术作为治疗终末期关节疾病的有效手段,能够显著缓解患者疼痛,提升关节功能与生…...
ESLint报错:Could not find config file.
如果你的ESLint的版本大于 8,同时使用 .eslinrc.js 和 .eslintignore 作为配置文件,且目前用的是 VSCODE ,就有可能遇到报错: Could not find config file. 这个是因为 VSCode 中 ESLint 插件的配置 eslint.useFlatConfig 的问题…...
npm install 卡在创建项目:sill idealTree buildDeps
参考: https://blog.csdn.net/PengXing_Huang/article/details/136460133 或者再执行 npm install -g cnpm --registryhttps://registry.npm.taobao.org 或者换梯子...
drizzleDumper:基于内存搜索的Android脱壳工具
一、工具介绍 drizzleDumper 是一款基于内存搜索的 Android 脱壳工具,主要用于从加固的 Android 应用程序中提取原始的 DEX 文件。它通过分析应用程序运行时的内存,定位并提取被加固的 DEX 文件,从而帮助开发者、安全研究人员进行逆向工程和…...
信号处理中的窗
窗函数(Window Function)是一种在信号处理中常用的工具,用于对信号进行截断和加权处理。它在频谱分析、滤波器设计以及信号处理的许多其他领域中都发挥着重要作用。 窗函数的基本概念 窗函数本质上是一个有限长度的序列,通常用于…...
FFmpeg学习:AVPacket结构体
1.AVPacket结构体 FFmpeg中用于封装一帧的编码数据的结构体(比如H264视频帧或者AAC音频帧),主要用于编解码过程中数据的载体,使用av_read_frame()读取获得,或者使用avcodec_send_packet()进行解码,与AVFra…...
34.[前端开发-JavaScript基础]Day11-王者轮播图-书籍购物车-BOM对象-JSON
1 认识BOM操作 认识BOM 2 全局对象window window对象 window对象的作用 window常见的属性 window常见的方法 3 事件对象event window常见的事件 4 location、history location对象常见的属性 Location对象常见的方法 URLSearchParams history对象常见属性和方法 5 navigato…...
FLEXlm如何通过web调用
FLEXlm 是一种流行的软件许可管理工具,广泛用于各种软件产品的授权管理。它支持多种协议,包括传统的服务器-客户端模式和一些基于网络的解决方案。如果你想通过 Web 接口调用 FLEXlm 许可证服务器,你可以通过以下几种方式实现: 使…...
深度解析Spring Boot可执行JAR的构建与启动机制
一、Spring Boot应用打包架构演进 1.1 传统JAR包与Fat JAR对比 传统Java应用的JAR包在依赖管理上存在明显短板,依赖项需要单独配置classpath。Spring Boot创新的Fat JAR(又称Uber JAR)解决方案通过spring-boot-maven-plugin插件实现了"…...
Zookeeper运维指南:服务端与客户端常用命令详解
#作者:任少近 文章目录 1 Zookeeper服务端常用命令2 Zookeeper客户端常用命令2.1Ls命令2.2创建节点create2.3Get命令2.4删除命令2.5修改命令 1 Zookeeper服务端常用命令 启动ZK服务: bin/zkServer.sh start # ./zkServer.sh startZooKeeper JMX enabled by defau…...
K8S学习之基础五十一:k8s部署jenkins
k8s部署jenkins 创建nfs共享目录, mkdir -p /data/v2 echo /data/v2 *(rw,no_root_squash) > /etc/exports exportfs -arv创建pv、pvc vi pv.yaml apiVersion: v1 kind: PersistentVolume metadata:name: jenkins-k8s-pv spec:capacity:storage: 1GiaccessMod…...
界面控件DevExpress WinForms v25.1 - 人工智能(AI)方面全新升级
DevExpress WinForms拥有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜…...
基于动态光影融合的缺陷实时检测和材质量化方法,并且整合EventPS、VMNer和EvDiG
要完成基于动态光影融合的缺陷实时检测和材质量化方法,并且整合EventPS、VMNer和EvDiG,是一个复杂且综合性的任务。以下是一个大致的实现步骤和代码示例,不过要完整完成论文和所有实验还需要大量的细化和调整。 整体思路 数据加载与预处理&…...
关于我对接了deepseek之后部署到本地将数据存储到mysql的过程
写在前面 今天写一下使用nodejs作为服务端,vue作为客户端,mysql的数据库,对接deepseek的全过程,要实现一个很简单的效果就是,可以自由的询问,然后可以将询问的过程存储到mysql的数据库中。 文档对接 deeps…...
Android 中两个 APK 之间切换的几中方法
在 Android 中,两个 APK(应用程序)之间的切换通常是通过 Intent 来实现的。以下是一些常见的方法和注意事项,帮助你实现两个 APK 之间的切换。 一、启动目标 APK 的主 Activity 1、setPackage 方法 使用 Intent 的 setPackage …...
【LeetCode 热题 100】解答汇总
一、哈希表 1. 两数之和 | python【简单】 49. 字母异位词分组 | python【中等】 128. 最长连续序列 | python【中等】 二、双指针 283. 移动零 | python【简单】 盛最多水的容器 三数之和 接雨水 三、滑动窗口 3. 无重复字符的最长子串 | python 【中等】 49. 字母异…...
【RAG综述系列】之 RAG 相关背景和基本原理
系列文章: 【RAG综述系列】之 RAG 相关背景和基本原理 【RAG综述系列】之 RAG 特点与挑战以及方法与评估 【RAG综述系列】之 RAG 先进方法与综合评估 【RAG综述系列】之 RAG 应用和未来方向 正文: 检索增强生成(Retrieval-Augmented Gen…...
Unity 开发休闲手游:M_Studio 实战指南,源码课件全解析
Unity 开发休闲手游:M_Studio 实战指南,源码课件全解析 在手游开发领域,Unity 引擎凭借其强大的跨平台能力和丰富的资源,成为众多开发者的首选。今天,我们深入探讨如何利用 Unity 开发休闲手机游戏,以 M_S…...
HTML5 新的 Input 类型学习笔记
HTML5 引入了多种新的表单输入类型,这些新特性不仅增强了输入控制,还提供了更强大的验证功能,使表单设计更加灵活和便捷。以下是 HTML5 新的 Input 类型的详细学习笔记。 一、color 类型 功能:用于选取颜色。 使用场景ÿ…...
【第23节】windows网络编程模型(WSAEventSelect模型)
目录 引言 一、WSAEventSelect模型概述 二、 WSAEventSelect模型的实现流程 2.1 创建一个事件对象,注册网络事件 2.2 等待网络事件发生 2.3 获取网络事件 2.4 手动设置信号量和释放资源 三、 WSAEventSelect模型伪代码示例 四、完整实践示例代码 引言 在网…...
C# 中实现 跨线程写入
方案核心思路 写入请求队列:使用 ConcurrentQueue 接收来自任意线程的写入请求。 专用写入线程:由独立线程处理队列中的写入操作,确保顺序执行。 双信号机制:通过 ManualResetEventSlim 控制读取线程的暂停与恢复。 线程安全确…...
联合体(Union)的使用与应用场景
引言 在 C/C++ 编程中,联合体(Union)是一个非常独特的数据结构。与结构体(struct)不同,联合体允许不同的数据类型共享同一块内存空间,从而节省内存。在许多需要高效内存管理的场景下,联合体的使用能够显著提高程序的性能与资源利用率。本文将从联合体的基本概念入手,…...
Spark2 之 Expression/Functions
ExpressionConverter src/main/scala/org/apache/gluten/expression/ExpressionConverter.scala TopNTransformer src/main/scala/org/apache/gluten/execution/TopNTransformer.scala...
【Mysql】SQL 优化全解析
文章目录 一、理解执行计划1.1 执行计划的作用1.2 查看执行计划 二、查询优化2.1 避免全表扫描2.2 使用覆盖索引2.3 合理使用 JOIN 三、索引优化3.1 索引设计原则3.2 索引维护 在数据驱动的当今时代,MySQL 作为应用广泛的开源关系型数据库&…...
谈谈对spring IOC的理解,原理和实现
一、IoC 核心概念 1. 控制反转(Inversion of Control) 传统编程中对象自行管理依赖(主动创建),而IoC将控制权转移给容器,由容器负责对象的创建、装配和管理,实现依赖关系的反向控制。 2. 依赖…...
Element UI实现表格全选、半选
制作如图所示的表格全选、半选: 父组件 <template><div id"app"><SelectHost :hostArray"hostArray" /></div> </template><script> import SelectHost from ./components/SelectHost.vue export default…...
Dify实现自然语言生成SQL并执行
目录 一、需求分析 二、解决思路 问题1:文字描述生成SQL语句 问题2:执行生成的SQL语句 完整解决方案 三、最终效果展示 四、具体实现 1.Agent提示词 2.知识库数据 3.sql执行器工作流创建 3.1 节点1 3.2 节点2 3.3 节点3 3.4 最终配置界面预…...
【leetcode hot 100 347】前 K 个高频元素
解法一:用map的value记录key出现的次数,用PriorityQueue构造最小堆。 class Solution {public int[] topKFrequent(int[] nums, int k) {// 把元素放在map中Map<Integer,Integer> map new HashMap<>();for(int num:nums){if(map.containsK…...
golang不使用锁的情况下,对slice执行并发写操作,是否会有并发问题呢?
背景 并发问题最简单的解决方案加个锁,但是,加锁就会有资源争用,提高并发能力其中的一个优化方向就是减少锁的使用。 我在之前的这篇文章《开启多个协程,并行对struct中的每个元素操作,是否会引起并发问题?》中讨论过多协程场景下struct的并发问题。 Go语言中的slice在…...
一文了解Gradle 依赖管理(五)- 依赖管理缓存依赖
文章目录 1. 版本目录 (Version Catalogs)1. 版本目录的概念与优势2. 主要优势3. 基本配置4. 使用版本目录5.使用外部版本目录文件6.实际项目中的版本目录最佳实践 2. 依赖锁定(Dependency Locking)1. 依赖锁定的概念与重要性2. 主要优势3. 如何启用依赖…...
如何在 Postman 中发送 PUT 请求?
在 Postman 中发送 PUT 请求的步骤相对简单,包括新建接口、选择 PUT 方法、填写 URL 和参数等几个主要步骤。 Postman 发送 put 请求教程...
Ubuntu20.04.6系统根目录扩容
文章目录 方法一:**1. 检查磁盘和分区情况****2. 扩展 vda3 分区****3. 扩展 LVM 物理卷****4. 扩展 LVM 逻辑卷****5. 扩展文件系统** 方法二:1. 查看当前磁盘分区情况2. 创建新分区3. 重新加载分区表4. 扩展物理卷(PV)5. 扩展逻辑卷&#x…...
《AI赋能SQL Server,数据处理“狂飙”之路》
在数字化浪潮汹涌的当下,企业的数据量犹如滚雪球般飞速增长。据统计,过去几年全球数据量的年增长率高达30%以上 ,海量数据如同双刃剑,既蕴含着无限商机,也给数据处理带来巨大挑战。SQL Server作为一款强大的关系型数据…...
c++ 日志框架G3log介绍及在嵌入式Linux上的移植(交叉编译)
在开发高性能的C应用程序时,一个高效的日志框架是不可或缺的。G3log是一个开源的日志库,以其高性能和易于使用著称,特别适用于嵌入式Linux环境。本文将详细介绍G3log的主要特性和如何在嵌入式Linux平台上进行交叉编译。 G3log介绍 G3log 是一…...
Buffer overFolw---Kryo序列化出现缓冲区溢出的问题解决
问题: 由于我的数据量太大,我设置批次为10000万,50w数据大概有400M左右,然后进行spark数据处理时候报错为org.apache.spark.SparkException:Kryo serialization failed:Buffer overFolw.Available:0,rquired 58900977,To …...
leetcode日常刷题
题目:K个一组翻转链表 思路 题目要求k个一组进行反转,首先考虑到如果k为1,那就可以直接返回链表头,这种情况没必要翻转。 如果只有一个节点或者head为空结点,直接返回head即可(一个节点翻转k次都是本身&am…...
菜鸡前端计算机强基计划之CS50 第七课 python 入门—— Python 中yield专题学习
菜鸡前端计算机强基计划之CS50 第七课 python 入门—— Python 中yield专题学习 1. 什么是 yield?直观感受 2. 生成器是什么?一个简单的例子 3. yield 的工作原理(图形化解释)4. yield 和内存的魔法用列表返回所有值用生成器逐步生…...
密码学——知识问答
目录 1、阐述公开密钥算法的定义,结合RSA算法说明公钥密码的基本要求。 说明公钥与私钥两种密码学并举例与其应用 1. 公钥密码学(非对称加密): 2. 私钥密码学(对称加密): 对比公钥与私钥密码…...
Talos-docker版本中创建 Kubernetes 集群
在talos容器化版本中部署Kubernetes集群,用于折腾学习。 1.系统信息 虚拟机软件:VMware Worktation 虚拟机配置:4G内存 4vCPU 200GB磁盘 操作系统:CentOS7.9 docker:20.10.15 PS:为啥VMware Worktat…...
【Excel使用技巧】某列保留固定字段或内容
目录 ✅ 方法一:使用 Excel 公式提取 body 部分 🔍 解释: ✅ 方法二:批量处理整列数据 🚨 注意事项 🚨 处理效果 我想保留Excel某一列的固定内容,比如原内容是: thread entry i…...
matlab 模拟 闪烁体探测器全能峰
clc;clear;close all %% 参数设置 num_events 1e5; % 模拟事件数 E 662e3; % γ射线能量(eV) Y 38000; % 光产额(photon/MeV,NaI(Tl)) eta 0.2; % 量子效率 G 1e6; …...
【leetcode hot 100 74】搜索二维矩阵
解法一:双重二分查找 class Solution {public boolean searchMatrix(int[][] matrix, int target) {int nmatrix.length, mmatrix[0].length;int row10, row2n-1, col10, col2m-1;int row_mid, col_mid;while(row1<row2){row_mid (row1row2)/2;while(col1<c…...
Maven 中 maven.test.skip 与skipTests 区别
在 Maven 中,maven.test.skip 和 skipTests 都用于控制测试的跳过行为,但它们的作用范围和底层机制有显著区别。以下是详细对比: 1. maven.test.skip 定义 maven.test.skip 是一个用户自定义属性(需在 pom.xml 的 <propertie…...
LLM - R1 强化学习 DRPO 策略优化 DAPO 与 Dr. GRPO 算法 教程
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/146533892 在强化学习算法中,DAPO (Decoupled Clip and Dynamic Sampling Policy Optimization),通过解耦裁剪和动态采样策…...
element-plus中,Loading 加载组件的使用
一.基本使用 给一个组件,如:table表格,加上v-loading"true"即可。 举例:复制如下代码。 <template><el-table v-loading"loading" :data"tableData" style"width: 100%"><…...