FPGA纯verilog代码实现4路视频缩放拼接 提供工程源码和技术支持
目录
- 1、前言
- 2、目前主流的FPGA图像缩放方案
- 3、目前主流的FPGA视频拼接方案
- 4、本设计方案的优越性
- 5、详细设计方案解读
- HDMI输入
- 图像缩放
- 图像缓存
- VGA时序
- HDMI输出
- 6、vivado工程详解
- 7、上板调试验证
- 8、福利:工程源码获取
1、前言
本文详细描述了FPGA纯verilog代码实现4路视频缩放拼接的实现设计方案,工程代码编译通过后上板调试验证,文章末尾有演示视频,可直接项目移植,适用于在校学生、研究生,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字成像和图像传输领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后。
2、目前主流的FPGA图像缩放方案
目前市面上主流的FPGA图像缩放方案如下:
1:Xilinx的HLS方案,该方案简单,易于实现,但只能用于Xilinx自家的FPGA;关于HLS实现图像缩放请,参考我之前写的文章HLS实现图像缩放点击查看:HLS图像缩放
2:非纯Verilog方案,大部分代码使用Verilog实现,但中间的fifo或ram等使用了IP,导致移植性变差,难以在Xilinx、Altera和国产FPGA之间自由移植;
3:纯Verilog方案,也就是本方案,一个字:牛逼!!!
3、目前主流的FPGA视频拼接方案
FPGA实现视频拼接是FPGA在图像处理领域的基本应用,如果你的视频是AXIS流,且你的开发板是K7或者zynq之类的高端处理器,可以使用Xilinx官方的video mixer实现视频拼接,关于video mixer实现视频拼接,可以参考我之前写的文章点击查看:video mixer实现视频拼接
但是,对于使用A7或者Spartan6之类的低端FPGA开发者来说,video mixer就不适用了,再者,video mixer必须是AXIS接口,对于vga时序或者摄像头rgb时序而言也不适用,必须用Xilinx的ip转为AXIS流,如此不仅麻烦且加大了逻辑资源消耗,这时,本文的纯verilog视频拼接方案就有用了。
4、本设计方案的优越性
一个字:牛逼,表现如下:
1:纯Verilog代码实现,学习性和阅读性达到天花板;
2:移植性达到天花板,Xilinx、Altera和国产FPGA之间自由移植;
3:算法达到天花板,融合了邻近插值和双线性插值两种算法;
4:实用性达到天花板,将图像缩放和图像拼接融合一体,符合实际的工程项目,做类似项目的兄弟可直接拿去用,一个月工资直接拿到手。。。
5、详细设计方案解读
详细设计方案框图如下:
HDMI输入
视频输入采用HDMI,分辨率为1920x1080,HDMI采用silicon9011芯片解码,silicon9011需要i2c配置才能使用,关于silicon9011芯片的配置和使用,请参考我之前写的文章点击查看:silicon9011
输入只有1路HDMI,为了模拟4路视频输入,直接将解码后的视频数据给到4路图像缩放模块。
图像缩放
本图像缩放模块将常用的双线性插值和邻域插值算法融合为一个代码中,通过输入参数选择某一种算法;代码使用纯verilog实现,没有任何ip,可在Xilinx、Intel、国产FPGA间任意移植;代码以ram和fifo为核心进行数据缓存和插值实现;
网上也有其他图像缩放例程代码,但大多使用了IP,导致在其他FPGA器件上移植变得困难,通用性不好;相比之下,本设计代码就具有通用性;
这里例化了4个图像缩放模块,将4路输入视频缩小至960x540;
关于图像缩放的详细设计说明,请参考我之前写的文章点击查看:图像缩放
图像缓存
使用FDMA方案实现图像三帧缓存,关于FDMA方案实现图像三帧缓存,请参考我之前写的文章点击查看:FDMA图像缓存
VGA时序
这部分很简单,不必多讲,就是生成一个1080P的VGA时序;
HDMI输出
视频输出采用HDMI,分辨率为1920x1080,HDMI采用silicon9134芯片编码,silicon9134需要i2c配置才能使用,关于silicon9134芯片的配置和使用,请参考我之前写的文章点击查看:silicon9134
6、vivado工程详解
工程BD如下:
综合后的代码架构如下:
FPGA资源消耗以及功耗预估如下:
顶层代码源码如下:
`timescale 1ns / 1ps
module top(
//ddr3 output [14:0]DDR3_0_addr,output [2:0]DDR3_0_ba ,output DDR3_0_cas_n ,output [0:0]DDR3_0_ck_n ,output [0:0]DDR3_0_ck_p ,output [0:0]DDR3_0_cke ,output [0:0]DDR3_0_cs_n ,output [3:0]DDR3_0_dm ,inout [31:0]DDR3_0_dq ,inout [3:0]DDR3_0_dqs_n ,inout [3:0]DDR3_0_dqs_p ,output [0:0]DDR3_0_odt ,output DDR3_0_ras_n ,output DDR3_0_reset_n ,output DDR3_0_we_n , input CLK_IN1_D_0_clk_n,input CLK_IN1_D_0_clk_p,output ddr3_ok ,
//hdmi_inoutput hdmi_in_nreset , //9011/9013 resetinput vin_clk , //clock for 9111/9013input vin_hs , //horizontal synchronization for 9011/9013input vin_vs , //vertical synchronization for 9011/9013input vin_de , //data valid for 9011/9013input[23:0] vin_data , //data for 9011/9013 inout hdmi_scl , //HDMI I2C clockinout hdmi_sda , //HDMI I2C dataoutput hdmi_nreset , //9134 reset
//hdmi_out output vout_hs , //horizontal synchronization for 9134output vout_vs , //vertical synchronization for 9134output vout_de , //data valid for 9134output vout_clk , //clock for 9134output[23:0] vout_data //data for 9134
);wire clk_200m ;
wire clk_hdmi ;
wire pll_resetn;
wire [0:0] resetn;
wire ud_r_0_ud_rclk;
wire [31:0] ud_r_0_ud_rdata;
wire ud_r_0_ud_rde;
wire ud_r_0_ud_rvs;
wire ud_w_0_ud_wclk;
wire [31:0] ud_w_0_ud_wdata;
wire ud_w_0_ud_wde;
wire ud_w_0_ud_wvs;
wire [31:0] ud_w_1_ud_wdata;
wire ud_w_1_ud_wde;
wire ud_w_1_ud_wvs;
wire [31:0] ud_w_2_ud_wdata;
wire ud_w_2_ud_wde;
wire ud_w_2_ud_wvs;
wire [31:0] ud_w_3_ud_wdata;
wire ud_w_3_ud_wde;
wire ud_w_3_ud_wvs;
wire ui_clk_100m;wire [9:0] lut_index;
wire [31:0] lut_data; wire [23:0] i_rgb;
wire o_hs ;
wire o_vs ;
wire o_de ;
wire [23:0] o_rgb;
wire hdmi_clk_rstn;
wire o_data_req;wire [23:0] resize0_rgb;
wire resize0_vs ;
wire resize0_de ;
wire [23:0] resize1_rgb;
wire resize1_vs ;
wire resize1_de ;
wire [23:0] resize2_rgb;
wire resize2_vs ;
wire resize2_de ;
wire [23:0] resize3_rgb;
wire resize3_vs ;
wire resize3_de ;assign hdmi_nreset =pll_resetn;
assign hdmi_in_nreset=pll_resetn;
assign ud_w_0_ud_wclk =vin_clk ;
assign ud_w_0_ud_wvs =resize0_vs ;
assign ud_w_0_ud_wde =resize0_de ;
assign ud_w_0_ud_wdata=resize0_rgb;
assign ud_w_1_ud_wclk =vin_clk ;
assign ud_w_1_ud_wvs =resize1_vs ;
assign ud_w_1_ud_wde =resize1_de ;
assign ud_w_1_ud_wdata=resize1_rgb;
assign ud_w_2_ud_wclk =vin_clk ;
assign ud_w_2_ud_wvs =resize2_vs ;
assign ud_w_2_ud_wde =resize2_de ;
assign ud_w_2_ud_wdata=resize2_rgb;
assign ud_w_3_ud_wclk =vin_clk ;
assign ud_w_3_ud_wvs =resize3_vs ;
assign ud_w_3_ud_wde =resize3_de ;
assign ud_w_3_ud_wdata=resize3_rgb;
assign ud_r_0_ud_rclk=clk_hdmi;
assign ud_r_0_ud_rvs=o_vs;
assign ud_r_0_ud_rde=o_data_req;
assign i_rgb=ud_r_0_ud_rdata[23:0];
assign vout_clk=clk_hdmi;
assign vout_hs=o_hs;
assign vout_vs=o_vs;
assign vout_de=o_de;
assign vout_data=o_rgb;i2c_config i2c_config_m0(
.rst (~pll_resetn ),
.clk (clk_200m ),
.clk_div_cnt (16'd500 ),
.i2c_addr_2byte (1'b0 ),
.lut_index (lut_index ),
.lut_dev_addr (lut_data[31:24]),
.lut_reg_addr (lut_data[23:8] ),
.lut_reg_data (lut_data[7:0] ),
.error ( ),
.done ( ),
.i2c_scl (hdmi_scl ),
.i2c_sda (hdmi_sda )
);lut_hdmi lut_hdmi_m0
(
.lut_index (lut_index),
.lut_data (lut_data )
);helai_video_scale #(.DATA_WIDTH (8 ), //Width of input/output data.CHANNELS (3 ), //Number of channels of DATA_WIDTH, for color images.DISCARD_CNT_WIDTH (8 ), //Width of inputDiscardCnt.INPUT_X_RES_WIDTH (11), //Widths of input/output resolution control signals.INPUT_Y_RES_WIDTH (11),.OUTPUT_X_RES_WIDTH (11),.OUTPUT_Y_RES_WIDTH (11),.FRACTION_BITS (8 ), //Number of bits for fractional component of coefficients..SCALE_INT_BITS (8 ), //Width of integer component of scaling factor. The maximum input data width to.SCALE_FRAC_BITS (14), //Width of fractional component of scaling factor.BUFFER_SIZE (4 ) //Depth of RFIFO
)video_scale0(.clk (vin_clk ),.rst (~pll_resetn),.i_vid_data (vin_data ), .i_vid_de (vin_de ),.o_vid_fifo_read (),.i_vid_vs (vin_vs ),.o_vout_data (resize0_rgb),.o_vout_de (resize0_de ), //latency of 4 clock cycles after nextDout is asserted.o_vout_vs (resize0_vs ),.i_vout_read (1),.i_discard_cnt (0), //Number of input pixels to discard before processing data. Used for clipping.i_src_image_x (1920-1), //Resolution of input data minus 1.i_src_image_y (1080-1),.i_des_image_x (960-1), //Resolution of output data minus 1.i_des_image_y (540-1),.i_scaler_x_ratio(32'h4000 * (1920-1) / (960-1)-1), //Scaling factors. Input resolution scaled up by 1/xScale. Format Q SCALE_INT_BITS.SCALE_FRAC_BITS.i_scaler_y_ratio(32'h4000 * (1080-1) / (540-1)-1), //Scaling factors. Input resolution scaled up by 1/yScale. Format Q SCALE_INT_BITS.SCALE_FRAC_BITS.i_left_offset (0), //Integer/fraction of input pixel to offset output data horizontally right. Format Q OUTPUT_X_RES_WIDTH.SCALE_FRAC_BITS.i_top_offset (0), //Fraction of input pixel to offset data vertically down. Format Q0.SCALE_FRAC_BITS.i_scaler_type (0) //Use nearest neighbor resize instead of bilinear
);helai_video_scale #(.DATA_WIDTH (8 ), //Width of input/output data.CHANNELS (3 ), //Number of channels of DATA_WIDTH, for color images.DISCARD_CNT_WIDTH (8 ), //Width of inputDiscardCnt.INPUT_X_RES_WIDTH (11), //Widths of input/output resolution control signals.INPUT_Y_RES_WIDTH (11),.OUTPUT_X_RES_WIDTH (11),.OUTPUT_Y_RES_WIDTH (11),.FRACTION_BITS (8 ), //Number of bits for fractional component of coefficients..SCALE_INT_BITS (8 ), //Width of integer component of scaling factor. The maximum input data width to.SCALE_FRAC_BITS (14), //Width of fractional component of scaling factor.BUFFER_SIZE (4 ) //Depth of RFIFO
)video_scale1(.clk (vin_clk ),.rst (~pll_resetn),.i_vid_data (vin_data ), .i_vid_de (vin_de ),.o_vid_fifo_read (),.i_vid_vs (vin_vs ),.o_vout_data (resize1_rgb),.o_vout_de (resize1_de ), //latency of 4 clock cycles after nextDout is asserted.o_vout_vs (resize1_vs ),.i_vout_read (1),.i_discard_cnt (0), //Number of input pixels to discard before processing data. Used for clipping.i_src_image_x (1920-1), //Resolution of input data minus 1.i_src_image_y (1080-1),.i_des_image_x (960-1), //Resolution of output data minus 1.i_des_image_y (540-1),.i_scaler_x_ratio(32'h4000 * (1920-1) / (960-1)-1), //Scaling factors. Input resolution scaled up by 1/xScale. Format Q SCALE_INT_BITS.SCALE_FRAC_BITS.i_scaler_y_ratio(32'h4000 * (1080-1) / (540-1)-1), //Scaling factors. Input resolution scaled up by 1/yScale. Format Q SCALE_INT_BITS.SCALE_FRAC_BITS.i_left_offset (0), //Integer/fraction of input pixel to offset output data horizontally right. Format Q OUTPUT_X_RES_WIDTH.SCALE_FRAC_BITS.i_top_offset (0), //Fraction of input pixel to offset data vertically down. Format Q0.SCALE_FRAC_BITS.i_scaler_type (0) //Use nearest neighbor resize instead of bilinear
);helai_video_scale #(.DATA_WIDTH (8 ), //Width of input/output data.CHANNELS (3 ), //Number of channels of DATA_WIDTH, for color images.DISCARD_CNT_WIDTH (8 ), //Width of inputDiscardCnt.INPUT_X_RES_WIDTH (11), //Widths of input/output resolution control signals.INPUT_Y_RES_WIDTH (11),.OUTPUT_X_RES_WIDTH (11),.OUTPUT_Y_RES_WIDTH (11),.FRACTION_BITS (8 ), //Number of bits for fractional component of coefficients..SCALE_INT_BITS (8 ), //Width of integer component of scaling factor. The maximum input data width to.SCALE_FRAC_BITS (14), //Width of fractional component of scaling factor.BUFFER_SIZE (4 ) //Depth of RFIFO
)video_scale2(.clk (vin_clk ),.rst (~pll_resetn),.i_vid_data (vin_data ), .i_vid_de (vin_de ),.o_vid_fifo_read (),.i_vid_vs (vin_vs ),.o_vout_data (resize2_rgb),.o_vout_de (resize2_de ), //latency of 4 clock cycles after nextDout is asserted.o_vout_vs (resize2_vs ),.i_vout_read (1),.i_discard_cnt (0), //Number of input pixels to discard before processing data. Used for clipping.i_src_image_x (1920-1), //Resolution of input data minus 1.i_src_image_y (1080-1),.i_des_image_x (960-1), //Resolution of output data minus 1.i_des_image_y (540-1),.i_scaler_x_ratio(32'h4000 * (1920-1) / (960-1)-1), //Scaling factors. Input resolution scaled up by 1/xScale. Format Q SCALE_INT_BITS.SCALE_FRAC_BITS.i_scaler_y_ratio(32'h4000 * (1080-1) / (540-1)-1), //Scaling factors. Input resolution scaled up by 1/yScale. Format Q SCALE_INT_BITS.SCALE_FRAC_BITS.i_left_offset (0), //Integer/fraction of input pixel to offset output data horizontally right. Format Q OUTPUT_X_RES_WIDTH.SCALE_FRAC_BITS.i_top_offset (0), //Fraction of input pixel to offset data vertically down. Format Q0.SCALE_FRAC_BITS.i_scaler_type (0) //Use nearest neighbor resize instead of bilinear
);helai_video_scale #(.DATA_WIDTH (8 ), //Width of input/output data.CHANNELS (3 ), //Number of channels of DATA_WIDTH, for color images.DISCARD_CNT_WIDTH (8 ), //Width of inputDiscardCnt.INPUT_X_RES_WIDTH (11), //Widths of input/output resolution control signals.INPUT_Y_RES_WIDTH (11),.OUTPUT_X_RES_WIDTH (11),.OUTPUT_Y_RES_WIDTH (11),.FRACTION_BITS (8 ), //Number of bits for fractional component of coefficients..SCALE_INT_BITS (8 ), //Width of integer component of scaling factor. The maximum input data width to.SCALE_FRAC_BITS (14), //Width of fractional component of scaling factor.BUFFER_SIZE (4 ) //Depth of RFIFO
)video_scale3(.clk (vin_clk ),.rst (~pll_resetn),.i_vid_data (vin_data ), .i_vid_de (vin_de ),.o_vid_fifo_read (),.i_vid_vs (vin_vs ),.o_vout_data (resize3_rgb),.o_vout_de (resize3_de ), //latency of 4 clock cycles after nextDout is asserted.o_vout_vs (resize3_vs ),.i_vout_read (1),.i_discard_cnt (0), //Number of input pixels to discard before processing data. Used for clipping.i_src_image_x (1920-1), //Resolution of input data minus 1.i_src_image_y (1080-1),.i_des_image_x (960-1), //Resolution of output data minus 1.i_des_image_y (540-1),.i_scaler_x_ratio(32'h4000 * (1920-1) / (960-1)-1), //Scaling factors. Input resolution scaled up by 1/xScale. Format Q SCALE_INT_BITS.SCALE_FRAC_BITS.i_scaler_y_ratio(32'h4000 * (1080-1) / (540-1)-1), //Scaling factors. Input resolution scaled up by 1/yScale. Format Q SCALE_INT_BITS.SCALE_FRAC_BITS.i_left_offset (0), //Integer/fraction of input pixel to offset output data horizontally right. Format Q OUTPUT_X_RES_WIDTH.SCALE_FRAC_BITS.i_top_offset (0), //Fraction of input pixel to offset data vertically down. Format Q0.SCALE_FRAC_BITS.i_scaler_type (0) //Use nearest neighbor resize instead of bilinear
);design_1_wrapper u_design_1_wrapper(.CLK_IN1_D_0_clk_n(CLK_IN1_D_0_clk_n),.CLK_IN1_D_0_clk_p(CLK_IN1_D_0_clk_p),.DDR3_0_addr (DDR3_0_addr ),.DDR3_0_ba (DDR3_0_ba ),.DDR3_0_cas_n (DDR3_0_cas_n ),.DDR3_0_ck_n (DDR3_0_ck_n ),.DDR3_0_ck_p (DDR3_0_ck_p ),.DDR3_0_cke (DDR3_0_cke ),.DDR3_0_cs_n (DDR3_0_cs_n ),.DDR3_0_dm (DDR3_0_dm ),.DDR3_0_dq (DDR3_0_dq ),.DDR3_0_dqs_n (DDR3_0_dqs_n ),.DDR3_0_dqs_p (DDR3_0_dqs_p ),.DDR3_0_odt (DDR3_0_odt ),.DDR3_0_ras_n (DDR3_0_ras_n ),.DDR3_0_reset_n (DDR3_0_reset_n ),.DDR3_0_we_n (DDR3_0_we_n ),.clk_200m (clk_200m ),.clk_hdmi (clk_hdmi ),.ddr3_ok (ddr3_ok ),.pll_resetn (pll_resetn ),.resetn (resetn ),.ud_r_0_ud_rclk (ud_r_0_ud_rclk ),.ud_r_0_ud_rdata (ud_r_0_ud_rdata ),.ud_r_0_ud_rde (ud_r_0_ud_rde ),.ud_r_0_ud_rempty (ud_r_0_ud_rempty ),.ud_r_0_ud_rvs (ud_r_0_ud_rvs ),.ud_w_0_ud_wclk (ud_w_0_ud_wclk ),.ud_w_0_ud_wdata (ud_w_0_ud_wdata ),.ud_w_0_ud_wde (ud_w_0_ud_wde ),.ud_w_0_ud_wfull (ud_w_0_ud_wfull ),.ud_w_0_ud_wvs (ud_w_0_ud_wvs ), .ud_w_1_ud_wclk (ud_w_1_ud_wclk ),.ud_w_1_ud_wdata (ud_w_1_ud_wdata ),.ud_w_1_ud_wde (ud_w_1_ud_wde ),.ud_w_1_ud_wvs (ud_w_1_ud_wvs ), .ud_w_2_ud_wclk (ud_w_1_ud_wclk ),.ud_w_2_ud_wdata (ud_w_1_ud_wdata ),.ud_w_2_ud_wde (ud_w_1_ud_wde ),.ud_w_2_ud_wvs (ud_w_1_ud_wvs ), .ud_w_3_ud_wclk (ud_w_1_ud_wclk ),.ud_w_3_ud_wdata (ud_w_1_ud_wdata ),.ud_w_3_ud_wde (ud_w_1_ud_wde ),.ud_w_3_ud_wvs (ud_w_1_ud_wvs ), .ui_clk_100m (ui_clk_100m )); video_timing_control vga(.i_clk (clk_hdmi ), .i_rst_n (pll_resetn ), .i_start_x (0),.i_start_y (0),.i_disp_h (1920),.i_disp_v (1080), .i_rgb (i_rgb ),.o_hs (o_hs ),.o_vs (o_vs ),.o_de (o_de ),.o_rgb (o_rgb ),.o_data_req(o_data_req )
);
endmodule
7、上板调试验证
开发板:Xilinx Artix7-35T开发板;
开发环境:vivado2019.1;
输入:HDMI,1080P,silicon9011解码;
输出:HDMI,1080P,silicon9134编码;
静态演示如下:
由于采用了懂王的视频,所以审核不过,只能截取点图片了。。。
8、福利:工程源码获取
福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送;
资料如下:获取方式:私,或者文章结尾的V名片;
相关文章:

FPGA纯verilog代码实现4路视频缩放拼接 提供工程源码和技术支持
目录1、前言2、目前主流的FPGA图像缩放方案3、目前主流的FPGA视频拼接方案4、本设计方案的优越性5、详细设计方案解读HDMI输入图像缩放图像缓存VGA时序HDMI输出6、vivado工程详解7、上板调试验证8、福利:工程源码获取1、前言 本文详细描述了FPGA纯verilog代码实现4…...

Spark on YARN运行过程,YARN-Client和YARN-Cluster
Spark on YARN运行过程 YARN是一种统一资源管理机制,在其上面可以运行多套计算框架。目前的大数据技术世界,大多数公司除了使用Spark来进行数据计算,由于历史原因或者单方面业务处理的性能考虑而使用着其他的计算框架,比如MapRed…...

NLP中一些工具列举
文章目录StanfordcoreNLPStanzaTankitspaCySuPar总结StanfordcoreNLP 这个老早就出来了,用java写的,但是已经有很多比他效果好的了。 Stanza 2020ACL发表的,看名字就知道和上一个是同一家的。 用已经切好词的句子进行依存分析。 这个功能…...

面试官:给你一段有问题的SQL,如何优化?
大家好,我是飘渺!我在面试的时候很喜欢问候选人这样一个问题:“你在项目中遇到过慢查询问题吗?你是怎么做SQL优化的?”很多时候,候选人会直接跟我说他们在编写SQL时会遵循的一些常用技巧,比如&a…...

嵌入式 Linux 文件IO操作
目录 Linux 文件操作 1 Linux 系统环境文件操作概念 2 缓冲 IO 文件操作 1 文件的创建,打开与关闭 fopen 函数函数 2 freopen 函数 3、fdopen函数 4、fclose函数 5、格式化读写 6、单个字符读写 7、文件定位 8、标准目录文件 9、非缓冲IO文件操作 Linux 文…...

植物大战 二叉搜索树——C++
这里是目录标题二叉排序树的概念模拟二叉搜索树定义节点类insert非递归Finderase(重点)析构函数拷贝构造(深拷贝)赋值构造递归FindRInsertR二叉搜索树的应用k模型KV模型二叉排序树的概念 单纯的二叉树存储数据没有太大的作用。 搜索二叉树作用很大。 搜索二叉树的一般都是用…...
[MatLab]矩阵运算和程序结构
一、矩阵 1.定义 矩阵以[ ]包含,以空格表示数据分隔,以;表示换行。 A [1 2 3 4 5 6] B 1:2:9 %1-9中的数,中间是步长(不能缺省) C repmat(B,3,2) %将B横向重复2次,纵向重复2次 D ones(2,4) …...

【Leedcode】栈和队列必备的面试题(第四期)
【Leedcode】栈和队列必备的面试题(第四期) 文章目录【Leedcode】栈和队列必备的面试题(第四期)一、题目二、思路图解1.声明结构体2.循环链表开辟动态结构体空间3.向循环队列插入一个元素4.循环队列中删除一个元素5. 从队首获取元…...

Windows Server 2016搭建文件服务器
1:进入系统在服务器管理器仪表盘中添加角色和功能。 2:下一步。 3:继续下一步。 4:下一步。 5:勾选Web服务器(IIS) 6:添加功能。 7:下一步。 8:下一步。 9:下一步。 10&a…...

零基础学SQL(十一、视图)
目录 前置建表 一、什么是视图 二、为什么使用视图 三、视图的规则和限制 四、视图的增删改查 五、视图数据的更新 前置建表 CREATE TABLE student (id int NOT NULL AUTO_INCREMENT COMMENT 主键,code varchar(255) NOT NULL COMMENT 学号,name varchar(255) DEFAULT NUL…...

web,h5海康视频接入监控视频流记录三(后台node取流)
前端vue,接入ws视频播放 云台控制 ,回放预览,都是需要调对应的海康接口。相当于,点击时,请求后台写好的接口,接口再去请求海康的接口 调用云台控制是,操作一次,不会自己停止&#x…...

网络安全从入门到精通:30天速成教程到底有多狠?你能坚持下来么?
毫无疑问,网络安全是当下最具潜力的编程方向之一。对于许多未曾涉足计算机编程的领域「小白」来说,深入地掌握网络安全看似是一件十分困难的事。至于一个月能不能学会网络安全,这个要看个人,对于时间管理不是很高的,肯…...

世界上最流行的编程语言,用户数超过Python,Java,JavaScript,C的总和!
世界上最流行的编程语言是什么? Python? Java? JavaScript? C?都不是,是Excel!外媒估计,全球有12亿人使用微软的Office套件,其中估计有7.5亿人使用Excel!可是Excel不就是能写点儿公式&#x…...

杂谈:created中两次数据修改,会触发几次页面更新?
面试题:created生命周期中两次修改数据,会触发几次页面更新? 一、同步的 先举个简单的同步的例子: new Vue({el: "#app",template: <div><div>{{count}}</div></div>,data() {return {count…...

原生JS实现拖拽排序
拖拽(这两个字看了几遍已经不认识了) 说到拖拽,应用场景不可谓不多。无论是打开电脑还是手机,第一眼望去的界面都是可拖拽的,靠拖拽实现APP或者应用的重新布局,或者拖拽文件进行操作文件。 先看效果图&am…...
Coredump-N: corrupted double-linked list
文章目录 问题安装debuginfo之后分析参数确定确定代码逻辑解决问题 今天碰到一例: #0 0xf7f43129 in __kernel_vsyscall () #1 0xf6942b16 in raise () from /lib/libc.so.6 #2 0xf6928e64 in abort () from /lib/libc.so.6 #3 0xf6986e8c in __libc_message () from /lib/li…...

5个好用的视频素材网站
推荐五个高质量视频素材网站,免费、可商用,赶紧收藏起来! 1、菜鸟图库 视频素材下载_mp4视频大全 - 菜鸟图库 网站素材非常丰富,有平面、UI、电商、办公、视频、音频等相关素材,视频素材质量很高,全部都是…...

使用码匠连接一切|二
目录 Elasticsearch Oracle ClickHouse DynamoDB CouchDB 关于码匠 作为一款面向开发者的低代码平台,码匠提供了丰富的数据连接能力,能帮助用户快速、轻松地连接和集成多种数据源,包括关系型数据库、非关系型数据库、API 等。平台提供了…...
3.1.1 表的相关设计
文章目录1.表中实体与实体对应的关系2.实际案例分析3.表的实际创建4.总结1.表中实体与实体对应的关系 一对多 如一个班级对应多名学生,一个客户拥有多个订单等这种类型表的建表要遵循主外键关系原则,即在从表创建一个字段,此字段作为外键指向…...

Vue3 企业级项目实战:认识 Spring Boot
Vue3 企业级项目实战 - 程序员十三 - 掘金小册Vue3 Element Plus Spring Boot 企业级项目开发,升职加薪,快人一步。。「Vue3 企业级项目实战」由程序员十三撰写,2744人购买https://s.juejin.cn/ds/S2RkR9F/ 越来越流行的 Spring Boot Spr…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...