基于OV2640/ OV5640 的图像采集显示系统

news2024/12/24 20:40:27

基于OV2640/ OV5640 的图像采集显示系统系列文章目录:
(1)基于 OV5640 摄像头理论知识讲解-成像和采样原理
(2)基于 OV5640 摄像头理论知识讲解-数字接口和控制接口
(3)基于 OV5640 摄像头理论知识讲解-典型工作模式配置
(4)基于OV2640/ OV5640 的图像采集显示系统

文章目录

  • 前言
  • 一、图像采集显示系统原理及结构
  • 二、各模块的定义
  • 三、顶层模块ov2640_ddr3_tft
  • 四、ov2640_ddr3_tft_tb文件


前言

本节将在实验“基于 DDR3 的串口传图帧缓存系统设计”实现一个图像采集显示应用系统,来设计 OV2640 / OV5640应用系统中所需的基本应用逻辑电路。

提示:以下是本篇文章正文内容,下面案例可供参考

一、图像采集显示系统原理及结构

1

整个系统最终的目的是要在 TFT 显示屏上显示图像数据,由于 TFT 显示屏采用的是RGB565 接口,为了让图像正常的显示在显示屏的指定位置,需要有相应的时序发生逻辑,这就是上图中的 Disp_Driver。该模块会按照 TFT 显示屏的接口时序产生对应的控制时序(HS、VS、DE、RGB data),实质上就是我们已经学习过的 TFT/VGA 控制器。
由于 TFT 显示屏显示时候,是按照 60 帧率的速率进行刷新,也就是每秒刷新 60 张图像,为了保证图像的正常显示,一般需要有一个图像缓冲区,TFT 控制器实时从该图像缓冲区中读取数据并送往 TFT 屏上显示。所以在上述系统中,设计了一个 DDR3 用来存储需要显示的图像数据。
从设计的框图可以看出,整个系统与基于 DDR3 的串口传图帧缓存系统的差异在于串口传图是电脑通过串口将数据传输给 FPGA,而本实验是通过 OV2640 摄像头采集数据传给FPGA 处理。本节重点是如何让驱动 OV2640,让 FPGA 正确采集到图像数据。

二、各模块的定义

(1)Camera_Init 模块:OV2640 要想能够正常的输出图像数据,必须经 SCCB 接口对其寄存器进行配置,所以整个系统首要的工作是使用控制逻辑经由 SCCB 接口对其进行初始化,在上图中,对 OV2640进行初始化的功能模块为 Camera_Init。该模块会在系统开始工作时,对 OV2640 中各个寄存器写入指定值以实现初始化操作(参考Camera_Init )。
(2)DVP Capture 模块:负责将 DVP 接口输出的数据按照每两个一组合,得到符合 RGB565 图像格式的 16 位数据,之后数据处理过程与串口传图是一样,所以需要使用 SCCB 接口对OV2640 进行设置,让其图像输出格式为 RGB565(参考DVP Capture )。
(3)disp_driver 模块:tft 屏显示驱动控制,对缓存在 DDR3 中的图像数据进行显示(可参考VGA成像原理)。
(4)wr_ddr3_fifo 模块:使用的 FIFO IP ,主要用于写入 DDR3 数据的缓存、解决数
据跨时钟域以及数据位宽的转换(IP生成参考 IP生成 )。
(5)rd_ddr3_fifo 模块:使用的 FIFO IP ,主要用于读出 DDR3 数据的缓存、解决数据
跨时钟域以及数据位宽的转换(IP生成参考 IP生成 )。
(6)fifo_ddr3_native_fifo 模块:主要是用于接口的转换,将 MIG IP 的Native接口换成与 FIFO
对接的接口(可参考第五节 )。
(7)mig_7series_native 模块: DDR3 控制器,使用的 Memory Interface Generator(MIG 7
Series)IP(可参考 DDR3 控制器 MIG IP 详解完整版 )。
(8)pll 模块:上述各个模块所需时钟的产生,使用 PLL IP。除去使用 IP 和前面章节讲过的模块外,还需要设计的模块包括Camera_Init 模块和DVP Capture模块。
(9)顶层模块ov2640_ddr3_tft,用于实现上述模块的转换与连接(参考第三节)。

三、顶层模块ov2640_ddr3_tft

/

// Module Name   : ov2640_ddr3_tft
// Description   : 摄像头采集数据,DDR3缓存,TFT显示
// Name          :小王在努力...
// Revision      :  Vivado 2018.3
// Revision 0.01 - File Created

/

module ov2640_ddr3_tft(
  //System clock reset
  input           clk50m        , //系统时钟输入,50MHz
  input           reset_n       , //复位信号输入
  //LED
  output [3:0]    led           ,
  //TFT Interface               
  output [15:0]   TFT_rgb       , //TFT数据输出
  output          TFT_hs        , //TFT行同步信号
  output          TFT_vs        , //TFT场同步信号
  output          TFT_clk       , //TFT像素时钟
  output          TFT_de        , //TFT数据使能
  output          TFT_pwm       , //TFT背光控制
  
  //HDMI Internal
  //hdmi1 interface
  output hdmi1_clk_p,
  output hdmi1_clk_n,
  output [2:0]hdmi1_dat_p,
  output [2:0]hdmi1_dat_n,
  output hdmi1_oe,
  //hdmi2 interface
  output hdmi2_clk_p,
  output hdmi2_clk_n,
  output [2:0] hdmi2_dat_p,
  output [2:0] hdmi2_dat_n,
  output hdmi2_oe,
  
  //camera interface
  output          camera_sclk   ,
  inout           camera_sdat   ,
  input           camera_vsync  ,
  input           camera_href   ,
  input           camera_pclk   ,
  output          camera_xclk   ,
  input  [7:0]    camera_data   ,
  output          camera_rst_n  ,
  //DDR3 Interface
  // Inouts
  inout  [15:0]   ddr3_dq       ,
  inout  [1:0]    ddr3_dqs_n    ,
  inout  [1:0]    ddr3_dqs_p    ,
  // Outputs      
  output [13:0]   ddr3_addr     ,
  output [2:0]    ddr3_ba       ,
  output          ddr3_ras_n    ,
  output          ddr3_cas_n    ,
  output          ddr3_we_n     ,
  output          ddr3_reset_n  ,
  output [0:0]    ddr3_ck_p     ,
  output [0:0]    ddr3_ck_n     ,
  output [0:0]    ddr3_cke      ,
  output [0:0]    ddr3_cs_n     ,
  output [1:0]    ddr3_dm       ,
  output [0:0]    ddr3_odt      
);
//*********************************
//Internal connect
//*********************************
  //clock
  wire          pll_locked;
  wire          loc_clk50m;
  wire          loc_clk200m;
  wire          loc_clk24m;
  wire          loc_clk33m;
  wire          loc_clk165m;
  //reset
  wire          g_rst_p;
  //camera interface
  wire          camera_init_done;
  wire          pclk_bufg_o;
  wire [15:0]   image_data;
  wire          image_data_valid;
  wire          image_data_hs;
  wire          image_data_vs;
  //wr_fifo Interface
  wire          wrfifo_clr;
  wire          wrfifo_wren;
  wire [15:0]   wrfifo_din;
  //rd_fifo Interface
  wire          rdfifo_clr;
  wire          rdfifo_rden;
  wire [15 :0]  rdfifo_dout;
  //mig Interface 
  wire          ui_clk             ;
  wire          ui_clk_sync_rst    ;
  wire          mmcm_locked;
  wire          init_calib_complete;
  //tft
  wire          clk_disp;
  wire          frame_begin;
  wire          disp_hs;
  wire          disp_vs;
  wire          disp_de;
  wire     [4:0]disp_blue;
  wire     [5:0]disp_green;
  wire     [4:0]disp_red;

//兼容小梅哥TFT5.0寸和TFT4.3寸显示屏,可根据实际进行配置选择
/*
  parameter IMAGE_WIDTH  = 480;
  parameter IMAGE_HEIGHT = 272;
  
  assign clk_disp = loc_clk9m;
*/
  parameter CAMERA_WIDTH = 800;
  parameter CAMERA_HEIGHT = 600;
  parameter IMAGE_WIDTH  = 800;
  parameter IMAGE_HEIGHT = 480;


  assign clk_disp = loc_clk33m;
  assign ddr3_init_done = mmcm_locked && init_calib_complete;

  
  assign g_rst_p    = ~ddr3_init_done;

  assign led = {camera_init_done,camera_rst_n,ddr3_init_done,pll_locked};

  pll pll
  (
    // Clock out ports
    .clk_out1 (loc_clk50m   ), // output clk_out1
    .clk_out2 (loc_clk200m  ), // output clk_out2
    .clk_out3 (loc_clk24m   ), // output clk_out3
    .clk_out4 (loc_clk33m   ), // output clk_out4
    .clk_out5 (loc_clk165m  ), // output clk_out5
    // Status and control signals
    .resetn   (reset_n      ), // input reset
    .locked   (pll_locked   ), // output locked
    // Clock in ports
    .clk_in1  (clk50m       )  // input clk_in1
  );

  assign camera_xclk = loc_clk24m;
  
    camera_init
  #(
    .CAMERA_TYPE    ( "ov2640"     ),//"ov2640" or "ov7725"
    .IMAGE_TYPE     ( 0            ),// 0: RGB; 1: JPEG
    .IMAGE_WIDTH    ( IMAGE_WIDTH  ),// 图片宽度
    .IMAGE_HEIGHT   ( IMAGE_HEIGHT ),// 图片高度
    .IMAGE_FLIP_EN  ( 1'b0           ),// 0: 不翻转,1: 上下翻转
    .IMAGE_MIRROR_EN( 1'b0           ) // 0: 不镜像,1: 左右镜像
  )camera_init
  (
    .Clk         (loc_clk50m        ),
    .Rst_n       (~g_rst_p          ),
    .Init_Done   (camera_init_done  ),
    .camera_rst_n(camera_rst_n      ),
    .camera_pwdn (                  ),
    .i2c_sclk    (camera_sclk       ),
    .i2c_sdat    (camera_sdat       )
  );

  BUFG BUFG_inst (
    .O(pclk_bufg_o ), // 1-bit output: Clock output
    .I(camera_pclk )  // 1-bit input: Clock input
  );

  DVP_Capture DVP_Capture(
    .Rst_p      (~camera_init_done ),//input
    .PCLK       (pclk_bufg_o      ),//input
    .Vsync      (camera_vsync     ),//input
    .Href       (camera_href      ),//input
    .Data       (camera_data      ),//input     [7:0]

    .ImageState (                 ),//output reg
    .DataValid  (image_data_valid ),//output
    .DataPixel  (image_data       ),//output    [15:0]
    .DataHs     (image_data_hs    ),//output
    .DataVs     (image_data_vs    ),//output
    .Xaddr      (                 ),//output    [11:0]
    .Yaddr      (                 ) //output    [11:0]
  );

//---------------------------------------------
//仅仿真用,正常功能时,将下面sim_dat_gen模块进行屏蔽
//仿真时,取消屏蔽sim_dat_gen模块,将DVP_Capture模块屏蔽
//---------------------------------------------
 // sim_dat_gen #(
   // .DISP_WIDTH  (IMAGE_WIDTH   ),
   // .DISP_HEIGHT (IMAGE_HEIGHT  ),
   // .DATA_WIDTH  (16           )
 // )
 // sim_dat_gen(
   // .clk          (pclk_bufg_o     ),
   // .reset        (g_rst_p         ),
   // .gen_en       (camera_init_done),
   // .sim_dat      (image_data      ),
   // .sim_dat_vaild(image_data_valid)
 // );
//-------------------------------------------

  assign wrfifo_wren = image_data_valid;
  assign wrfifo_din = image_data;
  assign wrfifo_clr = ~camera_init_done;
  assign rdfifo_clr = frame_begin;

  


fifo_mig_axi_fifo
			#(
			 . WR_DDR_ADDR_BEGIN ( 0                             )  ,
			 . WR_DDR_ADDR_END   ( IMAGE_WIDTH*CAMERA_HEIGHT*2   )  ,
			 . RD_DDR_ADDR_BEGIN ( 0                             )  ,
			 . RD_DDR_ADDR_END   ( IMAGE_WIDTH*IMAGE_HEIGHT*2    )  ,
			 . AXI_ID            ( 4'b0000                       )

			)fifo_mig_axi_fifo
			(
			
			//wr_ddr3_fifo ports
			 . wrfifo_rst       (wrfifo_clr                    )  ,   
			 . loc_clk50M       (pclk_bufg_o                   )  ,   
			 . wrfifo_din       (wrfifo_din                    )  ,   
			 . wrfifo_wren      (wrfifo_wren                   )  ,   
			 
			 //rd_ddr3_fifo ports
			 . rdfifo_rst       (rdfifo_clr                    )  ,   
			 . loc_clk33M       (loc_clk33m                    )  ,  
			 . rdfifo_rden      (rdfifo_rden                   )  ,   
			 . rdfifo_dout      (rdfifo_dout                   )  ,
						  
				
				
				
			//DDR3 Interface
			  //input
			  . loc_clk200M    (loc_clk200m            )       ,
			  . xx_sys_rst     (pll_locked             )       ,       //用于连接 pll_locked
			  . xx_aresetn     (pll_locked             )       ,       //用于连接 pll_locked
			  //output
			  . ui_clk             (ui_clk             )       ,
			  . ui_clk_sync_rst    (ui_clk_sync_rst    )       ,
			  . mmcm_locked        (mmcm_locked        )       ,
			  . init_calib_complete(init_calib_complete)       ,
				
				

		   //DDR3 Interface
			  // Inouts
			  . ddr3_dq     (ddr3_dq      )  ,
			  . ddr3_dqs_n  (ddr3_dqs_n   )  ,
			  . ddr3_dqs_p  (ddr3_dqs_p   )  , 
			  // Outputs      
			  . ddr3_addr    (ddr3_addr   )  ,
			  . ddr3_ba      (ddr3_ba     )  ,
			  . ddr3_ras_n   (ddr3_ras_n  )  ,
			  . ddr3_cas_n   (ddr3_cas_n  )  ,
			  . ddr3_we_n    (ddr3_we_n   )  ,
			  . ddr3_reset_n (ddr3_reset_n)  ,
			  . ddr3_ck_p    (ddr3_ck_p   )  ,
			  . ddr3_ck_n    (ddr3_ck_n   )  ,
			  . ddr3_cke     (ddr3_cke    )  ,
			  . ddr3_cs_n    (ddr3_cs_n   )  ,
			  . ddr3_dm      (ddr3_dm     )  ,
			  . ddr3_odt     (ddr3_odt    )    
		); 





    disp_driver disp_driver
  (
    .ClkDisp     (clk_disp       ),
    .Rst_p       (g_rst_p        ),

    .Data        (rdfifo_dout    ),
    .DataReq     (rdfifo_rden    ),

    .H_Addr      (               ),
    .V_Addr      (               ),

    .Disp_HS     (disp_hs        ),
    .Disp_VS     (disp_vs         ),
    .Disp_Red    (disp_red       ),
    .Disp_Green  (disp_green     ),
    .Disp_Blue   (disp_blue      ),
    .Frame_Begin (frame_begin    ),
    .Disp_DE     (disp_de        ),
    .Disp_PCLK   (TFT_clk        )
  );

 

  assign TFT_hs  = disp_hs;
  assign TFT_vs  = disp_vs;
  assign TFT_de  = disp_de;
  assign TFT_rgb = {disp_red,disp_green,disp_blue};
  assign TFT_pwm = 1'b1;

   //HDMI1
	  dvi_encoder dvi_encoder1(
		.pixelclk    (loc_clk33m    ),
		.pixelclk5x  (loc_clk165m   ),
		.rst_p       (g_rst_p       ),
		.blue_din    ({disp_blue ,3'b000}   ),
		.green_din   ({disp_green,2'b00 }   ),
		.red_din     ({disp_red  ,3'b000}   ),
		.hsync       (disp_hs     ),
		.vsync       (disp_vs     ),
		.de          (disp_de     ),
		.tmds_clk_p  (hdmi1_clk_p ),
		.tmds_clk_n  (hdmi1_clk_n ),
		.tmds_data_p (hdmi1_dat_p ),
		.tmds_data_n (hdmi1_dat_n )
	  );

	  assign hdmi1_oe = 1'b1;

	  //HDMI2
	  dvi_encoder dvi_encoder2(
		.pixelclk    (loc_clk33m  ),
		.pixelclk5x  (loc_clk165m ),
		.rst_p       (g_rst_p     ),
		.blue_din    ({disp_blue ,3'b000}   ),
		.green_din   ({disp_green,2'b00 }   ),
		.red_din     ({disp_red  ,3'b000}   ),
		.hsync       (disp_hs     ),
		.vsync       (disp_vs     ),
		.de          (disp_de     ),
		.tmds_clk_p  (hdmi2_clk_p ),
		.tmds_clk_n  (hdmi2_clk_n ),
		.tmds_data_p (hdmi2_dat_p ),
		.tmds_data_n (hdmi2_dat_n )
	  );

	  assign hdmi2_oe = 1'b1;









endmodule

四、ov2640_ddr3_tft_tb文件

`timescale 1ns / 1ps
//
// Module Name   : ov2640_ddr3_tft_tb
// Description   : 摄像头采集数据,DDR3缓存,TFT显示
// Name          :小王在努力...
// Revision      :  Vivado 2018.3
// Revision 0.01 - File Created
//


module ov2640_ddr_tft_tb(  );
     reg            clk50m;
     reg            reset_n;
     wire  [3:0 ]   led;
     wire  [15:0]   TFT_rgb       ; //TFT数据输出
     wire           TFT_hs        ; //TFT行同步信号
     wire           TFT_vs        ; //TFT场同步信号
     wire           TFT_clk       ; //TFT像素时钟
     wire           TFT_de        ; //TFT数据使能
     wire           TFT_pwm       ; //TFT背光控制
	 
	 wire hdmi1_clk_p;
	 wire hdmi1_clk_n;
	 wire [2:0]hdmi1_dat_p;
	 wire [2:0]hdmi1_dat_n;
	 wire hdmi1_oe;
	  
	 wire hdmi2_clk_p;
	 wire hdmi2_clk_n;
	 wire [2:0] hdmi2_dat_p;
	 wire [2:0] hdmi2_dat_n;
	 wire hdmi2_oe;
      //camera interface
     wire          camera_sclk  ;
     wire          camera_sdat ;
     reg           camera_vsync  ;
     reg           camera_href   ;
     reg           camera_pclk   ;
     wire          camera_xclk    ;
     wire  [7:0]   camera_data  ;
     wire          camera_rst_n ;
        
      wire [15:0]   ddr3_dq     ;
      wire [1:0 ]   ddr3_dqs_n   ;
      wire [1:0 ]   ddr3_dqs_p   ;
     
      wire [13:0]   ddr3_addr    ;
      wire [2:0 ]   ddr3_ba      ;
      wire          ddr3_ras_n   ;
      wire          ddr3_cas_n   ;
      wire          ddr3_we_n    ;
      wire          ddr3_reset_n ;
      wire [0:0]    ddr3_ck_p    ;
      wire [0:0]    ddr3_ck_n    ;
      wire [0:0]    ddr3_cke     ;
      wire [0:0]    ddr3_cs_n    ;
      wire [1:0]    ddr3_dm      ;
      wire [0:0]    ddr3_odt     ;
        
        
        
      initial clk50m = 1;
      always #10 clk50m = ~clk50m;
	  
	  
	  initial camera_pclk = 1;
	  always #12 camera_pclk = ~camera_pclk;
      
      initial begin
        reset_n = 0;
        #201;
        reset_n = 1;
        #500000000;
        $stop;
      
      
      
      
      end
        
        
        
        
        
        
        
        
        
        


     ov2640_ddr3_tft ov2640_ddr3_tft(

      clk50m        , //系统时钟输入,50MHz
      reset_n       , //复位信号输入
      led           ,
               
      TFT_rgb        , //TFT数据输出
      TFT_hs        , //TFT行同步信号
      TFT_vs        , //TFT场同步信号
      TFT_clk       , //TFT像素时钟
      TFT_de        , //TFT数据使能
      TFT_pwm       , //TFT背光控制
	  
	  hdmi1_clk_p,
	  hdmi1_clk_n,
	  hdmi1_dat_p,
	  hdmi1_dat_n,
	  hdmi1_oe,
	  
	  hdmi2_clk_p,
	  hdmi2_clk_n,
	  hdmi2_dat_p,
	  hdmi2_dat_n,
	  hdmi2_oe,

      camera_sclk   ,
      camera_sdat   ,
      camera_vsync  ,
      camera_href   ,
      camera_pclk   ,
      camera_xclk   ,
      camera_data   ,
      camera_rst_n  ,
 
  
      ddr3_dq       ,
      ddr3_dqs_n    ,
      ddr3_dqs_p    ,
      
      ddr3_addr     ,
      ddr3_ba       ,
      ddr3_ras_n    ,
      ddr3_cas_n    ,
      ddr3_we_n     ,
      ddr3_reset_n  ,
      ddr3_ck_p     ,
      ddr3_ck_n     ,
      ddr3_cke      ,
      ddr3_cs_n     ,
      ddr3_dm       ,
      ddr3_odt      
);




   ddr3_model ddr3_model
  (
    .rst_n  (ddr3_reset_n ),
    .ck     (ddr3_ck_p    ),
    .ck_n   (ddr3_ck_n    ),
    .cke    (ddr3_cke     ),
    .cs_n   (ddr3_cs_n    ),
    .ras_n  (ddr3_ras_n   ),
    .cas_n  (ddr3_cas_n   ),
    .we_n   (ddr3_we_n    ),
    .dm_tdqs(ddr3_dm      ),
    .ba     (ddr3_ba      ),
    .addr   (ddr3_addr    ),
    .dq     (ddr3_dq      ),
    .dqs    (ddr3_dqs_p   ),
    .dqs_n  (ddr3_dqs_n   ),
    .tdqs_n (             ),
    .odt    (ddr3_odt     )
  );
endmodule

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/946667.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mac软件删除方法?如何删除不会有残留

Mac电脑如果有太多无用的应用程序,很有可能会拖垮Mac系统的运行速度。因此,卸载电脑中无用的软件是优化Mac系统运行速度的最佳方式之一。Mac卸载应用程序的方式是和Windows有很大的区别,特别对于Mac新用户来说,如何无残留的卸载删…

Python Qt(七)Listview

源代码: # -*- coding: utf-8 -*-# Form implementation generated from reading ui file qt_listview.ui # # Created by: PyQt5 UI code generator 5.15.9 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is # run again. Do not…

2024王道408数据结构P144 T18

2024王道408数据结构P144 T18 思考过程 首先还是先看题目的意思,让我们在中序线索二叉树里查找指定结点在后序的前驱结点,这题有一点难至少对我来说…我讲的不清楚理解一下我做的也有点糊涂。在创建结构体时多两个变量ltag和rtag,当ltag0时…

基于Axios完成前后端分离项目数据交互

一、安装Axios npm i axios -S 封装一个请求工具:request.js import axios from axios// 创建可一个新的axios对象 const request axios.create({baseURL: http://localhost:9090, // 后端的接口地址 ip:porttimeout: 30000 })// request 拦截器 // 可以自请求…

全网首发,人体姿态估计算法在OK3588上部署应用(十三)

一、主机模型转换 采用FastDeploy来部署应用深度学习模型到OK3588板卡上 进入主机Ubuntu的虚拟环境 conda activate ok3588 主机环境搭建可以参考上一篇 《OK3588板卡实现人像抠图(十二)》 生成onnx文件 cd FastDeploy # 下载Paddle静态图模型并解压…

【AGC】集成APMS SDK后台无数据问题

【问题描述】 开发者按照文档集成了APMS SDK,但是在AGC后台没有数据,需要帮忙定位。 【问题分析】 后台没有性能数据的原因有很多,要从端侧和与云侧进行定位分析。 1. 首先需要查看端侧的调试日志,调试日志可以直观的看到性…

【Linux】系统启动过程

草稿 文章目录 〇、概述一、固件加载:BIOS / UEFI1.1 BIOS 和 UEFI1.2 UEFI 启动过程1.21 1.21.3 二、启动管理器阶段三、内核阶段四、init阶段五、登录阶段 〇、概述 Linux系统的启动过程是一个复杂而有趣的话题,它涉及到计算机的硬件、软件、操作系统…

【链表OJ】相交链表 环形链表1

前言: 💥🎈个人主页:​​​​​​Dream_Chaser~ 🎈💥 ✨✨刷题专栏:http://t.csdn.cn/UlvTc ⛳⛳本篇内容:力扣上链表OJ题目 目录 一.leetcode 160. 相交链表 1.问题描述: 2.解题思路: 二.leetcode 141.环形链表 …

2024毕业设计选题指南【附选题大全】

title: 毕业设计选题指南 - 如何选择合适的毕业设计题目 date: 2023-08-29 categories: 毕业设计 tags: 选题指南, 毕业设计, 毕业论文, 毕业项目 - 如何选择合适的毕业设计题目 当我们站在大学生活的十字路口,毕业设计便成了我们面临的一项重要使命。这不仅是对我们…

centos安装Nginx配置Nginx

1. 查看操作系统有没有安装Nginx which nginx 2. 使用epel的方式进行安装(方法二) 先安装epel sudo yum install yum-utils 安装完成后,查看安装的epel包即可 sudo yum install epel 3 开始安装nginx 上面的两个方法不管选择哪个&…

数学建模——校园供水系统智能管理

import pandas as pd data1pd.read_excel("C://Users//JJH//Desktop//E//附件_一季度.xlsx") data2pd.read_excel("C://Users//JJH//Desktop//E//附件_二季度.xlsx") data3pd.read_excel("C://Users//JJH//Desktop//E//附件_三季度.xlsx") data4…

MySQL官网下载安装包

MySQL官网: MySQL MySQL 8.0官网下载地址: MySQL :: Download MySQL Community Server 2023-07-18 MySQL 8.1.0 发布,这是 MySQL 变更发版模型后的第一个创新版本 (Innovation Release) 。 如果在官网中找不到下载位置,点击第二个…

【【萌新的STM32-22中断概念的简单补充】】

萌新的STM32学习22-中断概念的简单补充 我们需要注意的是这句话 从上面可以看出,STM32F1 供给 IO 口使用的中断线只有 16 个,但是 STM32F1 的 IO 口却远远不止 16 个,所以 STM32 把 GPIO 管脚 GPIOx.0~GPIOx.15(xA,B,C,D,E,F,G)分别对应中断…

RV64和ARM64栈结构差异

RV64和ARM64栈结构差异 1 RV64和ARM64栈结构差异示意图1.1 RV64和ARM64寄存器介绍1.1.1 RV64寄存器1.1.2 ARM64寄存器 1.2 RV64和ARM64栈结构差异示意图 2 RV64和ARM64栈使用示例2.1 测试的程序2.2 RV64反汇编的汇编程序2.3 ARM64反汇编的汇编程序2.4 RV64和ARM64测试程序的栈结…

Future

Future Future接口由FutureTask 实现类定义了操作异步任务执行的一些方法,比如异步任务的执行结果、取消任务的执行、判断任务是否被取消、判断任务执行是否完毕等。Future 接口可以为主线程开一个分支任务,专门为主线程处理耗时和费力的业务。 Future…

制造业物联网革命:智慧工厂数据采集与远程监控管理

智慧工厂是指运用现代信息技术和物联网技术,实现制造业生产过程的智能数字化。智慧工厂的工业设备不仅能够自动化运行,还可以通过网络技术帮助企业实现数据采集、远程监控与管理。4G工业网关便成为了智慧工厂通讯的重要组成部分,起到了连接工…

uni-app开发小程序中遇到的map地图的点聚合以及polygon划分区域问题

写一篇文章来记录以下我在开发小程序地图过程中遇到的两个小坑吧,一个是点聚合,用的是joinCluster这个指令,另一个是polygon在地图上划分多边形的问题: 1.首先说一下点聚合问题,由于之前没有做过小程序地图问题&#…

LNMP架构之搭建Discuz论坛

LNMP 一、编译安装Nginx1)前置准备2)开始编译安装3)添加到系统服务(systemd启动) 二、编译安装MySQL服务1)前置准备2)编译安装3)编辑配置文件4)更改mysql安装目录和配置文…

【流量分析】Godzilla分析

一、哥斯拉流量的特点: 1.User-Agent (弱特征) 哥斯拉客户端使用JAVA语言编写,在默认的情况下,如果不修改User-Agent,User-Agent会类似于Java/1.8.0_121(具体什么版本取决于JDK环境版本)。但是哥斯拉支持…

Pytest参数详解 — 基于命令行模式

1、--collect-only 查看在给定的配置下哪些测试用例会被执行 2、-k 使用表达式来指定希望运行的测试用例。如果测试名是唯一的或者多个测试名的前缀或者后缀相同,可以使用表达式来快速定位,例如: 命令行-k参数.png 3、-m 标记&#xff0…