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

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总线,保证高吞吐量的稳定采集。
✅ 多种触发模式支持:适应不同应用场景,如工业检测、航空影像采集、武器测试等。

硬件架构

IMG_256

图 2­ 硬件连接示意图

FPGA处理单元

利用现有商用FPGA主控板,搭载外设完成系统设计。

IMG_256

图 3 ALINX ZU19EG 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接口层

IMG_256

图 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

IMG_256

图 5 a2A2448-210cm 机械结构

IMG_256

图 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所示连接。

图 7 485接线图

设计通过RS485接口接收数据,经UART协议解析后转换为AXI4 Stream数据流,在第一次握手信号成功后将数据转换为源同步的方式将数据从TX1发送,每次数据会在同步时钟的上升沿改变如图8所示,第二次握手成功后数据也会按照源同步的方式从TX3输出,其他以此类推,数据是在奇数路输出,同步时钟在偶数路输出,总共能够输出4路数据与4路时钟

考虑到SSI板上没有PL端使用的按键,因此每次接收到数据32‘h55555555会使SSI板上复位,之后每一路源同步数据会转换成RS-422协议由每一路的Y和Z口输出。

图 8 SSI时序图

FPGA方案

FPGA实现

图 9 FPGA数据流

  1. 图像采集部分(左侧)

如图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链路,将数据传输到下一级数据处理模块。

  1. 数据解析部分(中间)

每块FMC采集卡的数据先通过External PHY,完成CXP链路的物理层解析。External PHY 主要用于信号处理、数据恢复,并将物理层数据转换为可供CXP Host解析的格式。

  1. 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数据一一对应,存在同步关系。

  1. 数据流处理部分(右侧)

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内存,软件读取的时候按照存储顺序对计算结果机型划分。

IMG_256

图 10 ISP处理

Block Design说明

如图 11 所示,Block Design 的核心部分由 cxp_phy 和 cxp_rx 组成。其中,cxp_phy 负责 CXP 链路的物理层解析,包括信号处理和数据恢复,并将数据转换为标准的图像格式;cxp_rx 则对 cxp_phy 解析后的图像数据进行拆分和接收。

图 11 核心模块

图 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):标识一行数据的结束,在每行最后一个像素时拉高。

图 12 cxp_phy Block Design

图 13 cxp host图像输出端口

如图 14 所示,cxp_rx 内部通过 video_to_axis 模块,将八路图像数据拆分,并转换为 AXI Stream 格式。如果需要对某一路相机的数据进行图像处理,只需复制该通道的 AXI Stream 数据并送入图像处理模块。复制操作可通过简单的组合逻辑实现,只需在 Block Design 中添加复制模块,并分别连接至图像处理模块和原有模块。

图 14 cxp rx Block Design

cxp_rx 还包含 Rx,用于将接收到的图像数据缓存至 DDR,如图 15 所示。

图 15 rx Block Design

如图 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 以实现数据分流。

图 16 ssi数据输出Block Design

软件方案

嵌入式层

嵌入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 类型 功能:用于选取颜色。 使用场景&#xff…...

【第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实现表格全选、半选

制作如图所示的表格全选、半选&#xff1a; 父组件 <template><div id"app"><SelectHost :hostArray"hostArray" /></div> </template><script> import SelectHost from ./components/SelectHost.vue export default…...

Dify实现自然语言生成SQL并执行

目录 一、需求分析 二、解决思路 问题1&#xff1a;文字描述生成SQL语句 问题2&#xff1a;执行生成的SQL语句 完整解决方案 三、最终效果展示 四、具体实现 1.Agent提示词 2.知识库数据 3.sql执行器工作流创建 3.1 节点1 3.2 节点2 3.3 节点3 3.4 最终配置界面预…...

【leetcode hot 100 347】前 K 个高频元素

解法一&#xff1a;用map的value记录key出现的次数&#xff0c;用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. 依赖锁定&#xff08;Dependency Locking&#xff09;1. 依赖锁定的概念与重要性2. 主要优势3. 如何启用依赖…...

如何在 Postman 中发送 PUT 请求?

在 Postman 中发送 PUT 请求的步骤相对简单&#xff0c;包括新建接口、选择 PUT 方法、填写 URL 和参数等几个主要步骤。 Postman 发送 put 请求教程...

Ubuntu20.04.6系统根目录扩容

文章目录 方法一&#xff1a;**1. 检查磁盘和分区情况****2. 扩展 vda3 分区****3. 扩展 LVM 物理卷****4. 扩展 LVM 逻辑卷****5. 扩展文件系统** 方法二:1. 查看当前磁盘分区情况2. 创建新分区3. 重新加载分区表4. 扩展物理卷&#xff08;PV&#xff09;5. 扩展逻辑卷&#x…...

《AI赋能SQL Server,数据处理“狂飙”之路》

在数字化浪潮汹涌的当下&#xff0c;企业的数据量犹如滚雪球般飞速增长。据统计&#xff0c;过去几年全球数据量的年增长率高达30%以上 &#xff0c;海量数据如同双刃剑&#xff0c;既蕴含着无限商机&#xff0c;也给数据处理带来巨大挑战。SQL Server作为一款强大的关系型数据…...

c++ 日志框架G3log介绍及在嵌入式Linux上的移植(交叉编译)

在开发高性能的C应用程序时&#xff0c;一个高效的日志框架是不可或缺的。G3log是一个开源的日志库&#xff0c;以其高性能和易于使用著称&#xff0c;特别适用于嵌入式Linux环境。本文将详细介绍G3log的主要特性和如何在嵌入式Linux平台上进行交叉编译。 G3log介绍 G3log 是一…...

Buffer overFolw---Kryo序列化出现缓冲区溢出的问题解决

问题&#xff1a; 由于我的数据量太大&#xff0c;我设置批次为10000万&#xff0c;50w数据大概有400M左右&#xff0c;然后进行spark数据处理时候报错为org.apache.spark.SparkException:Kryo serialization failed:Buffer overFolw.Available:0,rquired 58900977,To …...

leetcode日常刷题

题目&#xff1a;K个一组翻转链表 思路 题目要求k个一组进行反转&#xff0c;首先考虑到如果k为1&#xff0c;那就可以直接返回链表头&#xff0c;这种情况没必要翻转。 如果只有一个节点或者head为空结点&#xff0c;直接返回head即可&#xff08;一个节点翻转k次都是本身&am…...

菜鸡前端计算机强基计划之CS50 第七课 python 入门—— Python 中yield专题学习

菜鸡前端计算机强基计划之CS50 第七课 python 入门—— Python 中yield专题学习 1. 什么是 yield&#xff1f;直观感受 2. 生成器是什么&#xff1f;一个简单的例子 3. yield 的工作原理&#xff08;图形化解释&#xff09;4. yield 和内存的魔法用列表返回所有值用生成器逐步生…...

密码学——知识问答

目录 1、阐述公开密钥算法的定义&#xff0c;结合RSA算法说明公钥密码的基本要求。 说明公钥与私钥两种密码学并举例与其应用 1. 公钥密码学&#xff08;非对称加密&#xff09;&#xff1a; 2. 私钥密码学&#xff08;对称加密&#xff09;&#xff1a; 对比公钥与私钥密码…...

Talos-docker版本中创建 Kubernetes 集群

在talos容器化版本中部署Kubernetes集群&#xff0c;用于折腾学习。 1.系统信息 虚拟机软件&#xff1a;VMware Worktation 虚拟机配置&#xff1a;4G内存 4vCPU 200GB磁盘 操作系统&#xff1a;CentOS7.9 docker&#xff1a;20.10.15 PS&#xff1a;为啥VMware Worktat…...

【Excel使用技巧】某列保留固定字段或内容

目录 ✅ 方法一&#xff1a;使用 Excel 公式提取 body 部分 &#x1f50d; 解释&#xff1a; ✅ 方法二&#xff1a;批量处理整列数据 &#x1f6a8; 注意事项 &#x1f6a8; 处理效果 我想保留Excel某一列的固定内容&#xff0c;比如原内容是&#xff1a; thread entry i…...

matlab 模拟 闪烁体探测器全能峰

clc;clear;close all %% 参数设置 num_events 1e5; % 模拟事件数 E 662e3; % γ射线能量&#xff08;eV&#xff09; Y 38000; % 光产额&#xff08;photon/MeV&#xff0c;NaI(Tl)&#xff09; eta 0.2; % 量子效率 G 1e6; …...

【leetcode hot 100 74】搜索二维矩阵

解法一&#xff1a;双重二分查找 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 中&#xff0c;maven.test.skip 和 skipTests 都用于控制测试的跳过行为&#xff0c;但它们的作用范围和底层机制有显著区别。以下是详细对比&#xff1a; 1. maven.test.skip 定义 maven.test.skip 是一个用户自定义属性&#xff08;需在 pom.xml 的 <propertie…...

LLM - R1 强化学习 DRPO 策略优化 DAPO 与 Dr. GRPO 算法 教程

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/146533892 在强化学习算法中&#xff0c;DAPO (Decoupled Clip and Dynamic Sampling Policy Optimization)&#xff0c;通过解耦裁剪和动态采样策…...

element-plus中,Loading 加载组件的使用

一.基本使用 给一个组件&#xff0c;如&#xff1a;table表格&#xff0c;加上v-loading"true"即可。 举例&#xff1a;复制如下代码。 <template><el-table v-loading"loading" :data"tableData" style"width: 100%"><…...