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

基于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 resetinput           clk50m        , //系统时钟输入,50MHzinput           reset_n       , //复位信号输入//LEDoutput [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 interfaceoutput hdmi1_clk_p,output hdmi1_clk_n,output [2:0]hdmi1_dat_p,output [2:0]hdmi1_dat_n,output hdmi1_oe,//hdmi2 interfaceoutput hdmi2_clk_p,output hdmi2_clk_n,output [2:0] hdmi2_dat_p,output [2:0] hdmi2_dat_n,output hdmi2_oe,//camera interfaceoutput          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// Inoutsinout  [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
//*********************************//clockwire          pll_locked;wire          loc_clk50m;wire          loc_clk200m;wire          loc_clk24m;wire          loc_clk33m;wire          loc_clk165m;//resetwire          g_rst_p;//camera interfacewire          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 Interfacewire          wrfifo_clr;wire          wrfifo_wren;wire [15:0]   wrfifo_din;//rd_fifo Interfacewire          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;//tftwire          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;//HDMI1dvi_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;//HDMI2dvi_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 interfacewire          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 beginreset_n = 0;#201;reset_n = 1;#500000000;$stop;endov2640_ddr3_tft ov2640_ddr3_tft(clk50m        , //系统时钟输入,50MHzreset_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.rhkb.cn/news/111689.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vscode+ros开发环境搭建

目录 介绍 前提 vscode安装 vscode插件安装 工作空间准备 打开vscode 创建catkin包 编写cpp代码 编译 运行 启动ros服务 监听话题 启动ros测试 介绍 ros开发是机器人开发中必不可少的工作,语言选择可以是c,也可以是python。工具的话,不能像wi…

ceph中PGLog处理流程

ceph的PGLog是由PG来维护,记录了该PG的所有操作,其作用类似于数据库里的undo log。PGLog通常只保存近千条的操作记录(默认是3000条, 由osd_min_pg_log_entries指定),但是当PG处于降级状态时,就会保存更多的日志&#x…

React 生命周期

React的生命周期 一、什么是React的生命周期二、传统生命周期2.1、挂载(Mounting)2.2、更新(Updating)2.3、卸载(Unmounting)2.4、API2.4.1、render2.4.1.1、Updating 阶段,render调用完还有可能…

WPF基础入门-Class6-WPF通知更改

WPF基础入门 Class6-WPF通知 1、显示页面&#xff1a; <Grid><StackPanel><TextBox Text"{Binding Name}"></TextBox><TextBox Text"{Binding Title}"></TextBox><Button Command"{Binding ShowCommand}&qu…

初次跑yolo5遇到的一些问题

1. ImportError: cannot import name COMMON_SAFE_ASCII_CHARACTERS‘ from charset-normalizerconstant‘ 这个报错可能是由于charset_normalizer模块的版本问题引起的。尝试更新charset_normalizer模块到最新版本&#xff0c;或者使用较旧的版本&#xff0c;看看是否可以解…

用AI + Milvus Cloud搭建着装搭配推荐系统

在上一篇文章中,我们学习了如何利用人工智能技术(例如开源 AI 向量数据库 Milvus Cloud 和 Hugging Face 模型)寻找与自己穿搭风格相似的明星。在这篇文章中,我们将进一步介绍如何通过对上篇文章中的项目代码稍作修改,获得更详细和准确的结果,文末附赠彩蛋。 注:试用此…

Ansys Zemax | 手机镜头设计 - 第 2 部分:使用 OpticsBuilder 实现光机械封装

本文是3篇系列文章的一部分&#xff0c;该系列文章将讨论智能手机镜头模块设计的挑战&#xff0c;从概念、设计到制造和结构变形的分析。本文是三部分系列的第二部分。概括介绍了如何在 CAD 中编辑光学系统的光学元件以及如何在添加机械元件后使用 Zemax OpticsBuilder 分析系统…

Python切换输入法的实战代码

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

大模型开发05:PDF 翻译工具开发实战

大模型开发实战05:PDF 翻译工具开发实战 PDF-Translator 机器翻译是最广泛和基础的 NLP 任务 PDF-Translator PDF 翻译器是一个使用 AI 大模型技术将英文 PDF 书籍翻译成中文的工具。这个工具使用了大型语言模型 (LLMs),如 ChatGLM 和 OpenAI 的 GPT-3 以及 GPT-3.5 Turbo 来…

NewStarCTF 2022 web方向题解 wp

----------WEEK1---------- BUU NewStarCTF 公开赛赛道 WEEK1 [NotPHP] 先看题目&#xff0c;要传参加绕过。 分析一下代码&#xff1a;首先get一个datadata://test/plain,Wel…。然后key1和2用数组可以绕过。num2077a可以绕过弱类型。eval()中的php语句被#注释了&#xff0c…

成都智慧企业发展研究院总经理郑小华:践行双轮驱动,为能源电力数智化注入新活力丨数据猿专访...

大数据产业创新服务媒体 ——聚焦数据 改变商业 随着全球经济走向数字化&#xff0c;中国正处于这一浪潮的前沿&#xff0c;进行前所未有的技术与产业深度融合。政府在2023年2月印发的《数字中国建设整体布局规划》等政策下&#xff0c;明确展示了对数字经济的支持与鼓励&…

串口接收数据-控制LED灯

目标 通过串口接收数据&#xff0c;对数据分析&#xff0c;控制8个LED灯按照设定时间闪烁。 8个LED灯可以任意设计&#xff0c;是否闪烁。闪烁时间按ms计算&#xff0c;通过串口发送&#xff0c;可设置1~4,294,967,296ms&#xff0c;也就是4字节数据协议自拟&#xff0c;有数…

代码随想录笔记--链表篇

目录 1--虚拟头节点的使用 2--设计链表 3--反转链表 4--两两交换链表中的节点 5--快慢指针 5-1--删除链表倒数第N个节点 5-2--环形链表 5-3--环形链表II 1--虚拟头节点的使用 在链表相关题目中&#xff0c;常新定义一个虚拟头结点 dummynode 来指向原链表的头结点&…

为何反射探针关闭Mipmap后变成了白图

1&#xff09;为何反射探针关闭Mipmap后变成了白图 2&#xff09;2021.3 Android从AssetBundle中加载视频播放失败问题 3&#xff09;SBP是否可以解决打包时FBX等模型文件中额外的GameObject 4&#xff09;Addressables加载已打包过的Prefab后Mono脚本丢失 这是第349篇UWA技术知…

暑期实习总结(焊点数据管理软件开发):Python操作MySQL数据库、Django搭建前端网页、以及Excel中数据与MySQL数据库的互转

暑期实习总结&#xff08;焊点数据管理软件开发&#xff09;:Python操作MySQL数据库、Django搭建前端网页、以及Excel中数据与MySQL数据库的互转 ​ 这一周是我在企业实习的最后一周&#xff0c;在企业做的项目已基本完成。这篇博客的目的也是总结一些项目中的一些小问题&…

java八股文面试[多线程]——synchronized 和lock的区别

其他差别&#xff1a; synchronized是隐式的加锁,lock是显式的加锁; synchronized底层采用的是objectMonitor,lock采用的AQS; synchronized在进行加锁解锁时,只有一个同步队列和一个等待队列, lock有一个同步队列,可以有多个等待队列; synchronized使用了object类的wait和noti…

博流RISC-V芯片BL616开发环境搭建

文章目录 1、工具安装2、代码下载3、环境变量配置4、下载交叉编译器5、编译与下载运行6、使用ninja编译 本文分别介绍博流RISC-V芯片 BL616 在 Windows和Linux 下开发环境搭建&#xff0c;本文同时适用BL618&#xff0c;BL602&#xff0c;BL702&#xff0c;BL808系列芯片。 1、…

迁移学习:实现快速训练和泛化的新方法

文章目录 迁移学习的原理迁移学习的应用快速训练泛化能力提升 迁移学习的代码示例拓展应用与挑战结论 &#x1f389;欢迎来到AIGC人工智能专栏~迁移学习&#xff1a;实现快速训练和泛化的新方法 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博…

【Java从0到1学习】13 Java IO流

1. 流 1.1 流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中&#xff0c;管道是一条不间断的字节流&#xff0c;用来实现程序或进程间的通信&#xff0c;或读写外围设备、外部文件等。 一个流&#xff0c;必有源端和目的端&#xff0c;它们可以是计算机内存的…