TFT显示屏驱动

REVIEW

        已经学习过VGA 时序与实现-CSDN博客

                          VGA 多分辨率-CSDN博客

        今天就来让TFT屏显示一下

ACZ702开发板管脚信息表 - ACZ702开发板 - 芯路恒电子技术论坛 - Powered by Discuz! (corecourse.cn)

        小梅哥视频:24 RGB TFT显示屏原理与驱动实现_哔哩哔哩_bilibili

1.  设置显示屏参数与时钟

        注意到VGA_parameter.v中,不懂得分辨率对应于不同的频率,这里结合IP核,学习clk

        现有时钟频率为50MHz ,5寸 TFT屏对应800*480为33MHz

        采用PLL锁相环设置时钟频率

        由于 ACZ702 的按键按下是低电平, PLL 复位设置成低电平有效。

        具体设置方法如下:

        本次实验只生成一个时钟频率,但在本页设置中,可以增加多个输出时钟:

        同频率不同相位、不同频率等, 在后续实验中,可以进行设置进行比较

        本次未设置reset 、locked

 2.  VGA_CTRL.v

        本程序中未对RGB888/RGB565进行设置

        在xdc文件中进行说明

module VGA_CTRL(input clk ,input reset_n ,input [23:0]data ,output reg data_req ,output reg [11:0]H_addr , //当前扫描点的H坐标output reg [11:0]V_addr , //当前扫描点的V坐标output reg VGA_HS ,output reg VGA_VS , output reg VGA_BLK , //BLK表示的是data时间段output reg [23:0]VGA_RGB  //{R[7:0]、G[7:0]、B[7:0]});`include "vga_parameter.v"localparam VGA_HS_end = `H_Sync_Time - 1'b1 ;localparam Hdat_begin = `H_Sync_Time + `H_Back_Porch + `H_Left_Border - 1'b1 ;localparam Hdat_end = `H_Total_Time - `H_Right_Border - `H_Front_Porch - 1'b1 ;localparam Hpixel_end = `H_Total_Time - 1'b1 ;localparam VGA_VS_end = `V_Sync_Time - 1'b1 ;localparam Vdat_begin = `V_Sync_Time + `V_Back_Porch + `V_Top_Border - 1'b1 ;localparam Vdat_end = `V_Total_Time - `V_Bottom_Border - `V_Front_Porch - 1'b1 ;localparam Vline_end = `V_Total_Time - 1'b1 ;//行计数器reg[11:0]H_cnt;always@(posedge clk or negedge reset_n)if(!reset_n)    H_cnt <= 0 ;else if(H_cnt == Hpixel_end)H_cnt <= 0 ;else H_cnt <= H_cnt + 1'b1 ;// 场计数器reg[11:0]V_cnt;always@(posedge clk or negedge reset_n)if(!reset_n)    V_cnt <= 0 ;else if(H_cnt == Hpixel_end)if(V_cnt == Vline_end)V_cnt <= 0 ;else V_cnt <= V_cnt + 1'b1 ;else V_cnt <= V_cnt ;//     VGA_HSalways@(posedge clk or negedge reset_n)if(!reset_n)  VGA_HS <= 1;else if(H_cnt == 0) VGA_HS <= 0;else if(H_cnt > VGA_HS_end) VGA_HS <= 1;//     VGA_VSalways@(posedge clk or negedge reset_n)if(!reset_n)  VGA_VS <= 1;else if(V_cnt == 0) VGA_VS <= 0;else if(V_cnt > VGA_VS_end) VGA_VS <= 1;  //     data_reqalways@(posedge clk or negedge reset_n)if(!reset_n)    data_req <= 0 ;else data_req <= ((H_cnt >= Hdat_begin)&&(H_cnt < Hdat_end)&&(V_cnt >= Vdat_begin)&&(V_cnt <= Vdat_end)) ? 1 : 0;//     VGA_BLKalways@(posedge clk or negedge reset_n)if(!reset_n)    VGA_BLK <= 0 ;else VGA_BLK <= data_req ;//    assign VGA_RGB = VGA_BLK? Data:0;//     VGA_RGBalways@(posedge clk )if(data_req) VGA_RGB <= data;elseVGA_RGB <= 0;//addressalways@(posedge clk )if(data_req)beginH_addr <= H_cnt - Hdat_begin;V_addr <= V_cnt - Vdat_begin;endelsebeginH_addr <= 0;V_addr <= 0;end 
endmodule

3.  VGA_CTRL_test.v

显示彩条:

TFT_BL表示背光,拉高即可

module VGA_CTRL_test(input clk , //50MHZ时钟input reset_n ,output VGA_CLK,output VGA_HS, //TFT行同步信号output VGA_VS, //TFT场同步信号output VGA_BLK,        //VGA 场消隐信号output [23:0] VGA_RGB ,//TFT数据输出output TFT_BL  //背光
);assign TFT_BL = 1;reg [23:0]disp_data;wire [11:0]hcount;wire [11:0]vcount;wire Clk33M; wire Data_Req;assign VGA_CLK= Clk33M;clk_vga vga_clk(.clk_out1(Clk25M),.clk_in1(clk));      VGA_CTRL VGA_CTRL(.clk(Clk33M),    //系统输入时钟33MHZ.reset_n(reset_n),.data(disp_data),    //待显示数据.data_req(Data_Req),.H_addr(hcount),        //VGA行扫描计数器.V_addr(vcount),        //VGA场扫描计数器.VGA_HS(VGA_HS),        //VGA行同步信号.VGA_VS(VGA_VS),        //VGA场同步信号.VGA_BLK(VGA_BLK) ,     //VGA 场消隐信号.VGA_RGB(VGA_RGB)  //VGA数据输出);//定义颜色编码
localparam BLACK       = 24'h000000, //黑色BLUE        = 24'h0000FF, //蓝色RED     = 24'hFF0000, //红色PURPPLE = 24'hFF00FF, //紫色GREEN       = 24'h00FF00, //绿色CYAN        = 24'h00FFFF, //青色YELLOW  = 24'hFFFF00, //黄色WHITE       = 24'hFFFFFF; //白色//定义每个像素块的默认显示颜色值
localparam R0_C0 = BLACK,  //第0行0列像素块R0_C1 = BLUE,   //第0行1列像素块R1_C0 = RED,    //第1行0列像素块R1_C1 = PURPPLE,//第1行1列像素块R2_C0 = GREEN,  //第2行0列像素块R2_C1 = CYAN,   //第2行1列像素块R3_C0 = YELLOW, //第3行0列像素块R3_C1 = WHITE;  //第3行1列像素块wire R0_act = vcount >= 0 && vcount < 120;  //正在扫描第0行wire R1_act = vcount >= 120 && vcount < 240;//正在扫描第1行wire R2_act = vcount >= 240 && vcount < 360;//正在扫描第2行wire R3_act = vcount >= 360 && vcount < 480;//正在扫描第3行wire C0_act = hcount >= 0 && hcount < 400; //正在扫描第0列wire C1_act = hcount >= 400 && hcount < 800;//正在扫描第1列 wire R0_C0_act=R0_act & C0_act;//第0行0列像素块处于被扫描中标志信号wire R0_C1_act=R0_act & C1_act;//第0行1列像素块处于被扫描中标志信号wire R1_C0_act=R1_act & C0_act;//第1行0列像素块处于被扫描中标志信号wire R1_C1_act=R1_act & C1_act;//第1行1列像素块处于被扫描中标志信号wire R2_C0_act=R2_act & C0_act;//第2行0列像素块处于被扫描中标志信号wire R2_C1_act=R2_act & C1_act;//第2行1列像素块处于被扫描中标志信号wire R3_C0_act=R3_act & C0_act;//第3行0列像素块处于被扫描中标志信号wire R3_C1_act=R3_act & C1_act;//第3行1列像素块处于被扫描中标志信号always@(*)case({R3_C1_act,R3_C0_act,R2_C1_act,R2_C0_act,R1_C1_act,R1_C0_act,R0_C1_act,R0_C0_act})8'b0000_0001:disp_data = R0_C0;8'b0000_0010:disp_data = R0_C1;8'b0000_0100:disp_data = R1_C0;8'b0000_1000:disp_data = R1_C1;8'b0001_0000:disp_data = R2_C0;8'b0010_0000:disp_data = R2_C1;8'b0100_0000:disp_data = R3_C0;8'b1000_0000:disp_data = R3_C1;default:disp_data = R0_C0;endcaseendmodule

4.  VGA_CTRL_test.xdc

        由于使用的是RGB565格式

        设置中data 与 VGA_RGB 都为24位

        此时在I/O中有几位是无需链接的,会出现[DRC NSTD-1] 

【Vivado常见问题】【DRC NSTD-1 DRC UCIO-1】无法生成bitstream(部分管脚位置或电平未指定) - Vivado软件使用和设置 - 芯路恒电子技术论坛 - Powered by Discuz! (corecourse.cn)

xdc文件添加:

set_property SEVERITY {Warning} [get_drc_checks NSTD-1]
set_property SEVERITY {Warning} [get_drc_checks RTSTAT-1]
set_property SEVERITY {Warning} [get_drc_checks UCIO-1]
set_property SEVERITY {Warning} [get_drc_checks NSTD-1]
set_property SEVERITY {Warning} [get_drc_checks RTSTAT-1]
set_property SEVERITY {Warning} [get_drc_checks UCIO-1]set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[23]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[22]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[21]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[20]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[19]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[18]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[17]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[16]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[15]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[14]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[13]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[12]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[11]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[10]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[9]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[8]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports reset_n]
set_property IOSTANDARD LVCMOS33 [get_ports VGA_BLK]
set_property IOSTANDARD LVCMOS33 [get_ports TFT_BL]
set_property IOSTANDARD LVCMOS33 [get_ports VGA_CLK]
set_property IOSTANDARD LVCMOS33 [get_ports VGA_HS]
set_property IOSTANDARD LVCMOS33 [get_ports VGA_VS]
set_property PACKAGE_PIN W20 [get_ports {VGA_RGB[23]}]
set_property PACKAGE_PIN W19 [get_ports {VGA_RGB[22]}]
set_property PACKAGE_PIN V17 [get_ports {VGA_RGB[21]}]
set_property PACKAGE_PIN V16 [get_ports {VGA_RGB[20]}]
set_property PACKAGE_PIN T15 [get_ports {VGA_RGB[19]}]
set_property PACKAGE_PIN V20 [get_ports {VGA_RGB[15]}]
set_property PACKAGE_PIN U17 [get_ports {VGA_RGB[14]}]
set_property PACKAGE_PIN V18 [get_ports {VGA_RGB[13]}]
set_property PACKAGE_PIN T16 [get_ports {VGA_RGB[12]}]
set_property PACKAGE_PIN R16 [get_ports {VGA_RGB[11]}]
set_property PACKAGE_PIN U19 [get_ports {VGA_RGB[10]}]
set_property PACKAGE_PIN Y19 [get_ports {VGA_RGB[7]}]
set_property PACKAGE_PIN Y18 [get_ports {VGA_RGB[5]}]
set_property PACKAGE_PIN W16 [get_ports {VGA_RGB[4]}]
set_property PACKAGE_PIN Y17 [get_ports {VGA_RGB[3]}]
set_property PACKAGE_PIN W14 [get_ports VGA_VS]
set_property PACKAGE_PIN U14 [get_ports VGA_HS]
set_property PACKAGE_PIN U15 [get_ports VGA_CLK]
set_property PACKAGE_PIN R17 [get_ports TFT_BL ]
set_property PACKAGE_PIN U18 [get_ports clk]
set_property PACKAGE_PIN H18 [get_ports reset_n]set_property PACKAGE_PIN W15 [get_ports VGA_BLK]

5.  显示

6.  RGB565

        对后续使用TFT屏幕,将VGA_CTRL改为VGA_CTRL_565进行使用

        即 [23,0]改为[15,0]

6.1 VGA_CTRL_RGB565.v

module VGA_CTRL_RGB565(input clk ,input reset_n ,input [15:0]data ,output reg data_req ,output reg [11:0]H_addr , //当前扫描点的H坐标output reg [11:0]V_addr , //当前扫描点的V坐标output reg VGA_HS ,output reg VGA_VS , output reg VGA_BLK , //BLK表示的就是输出输出的时间段output reg [15:0]VGA_RGB  //{R[5:0]、G[6:0]、B[5:0]});`include "vga_parameter.v"localparam VGA_HS_end = `H_Sync_Time - 1'b1 ;localparam Hdat_begin = `H_Sync_Time + `H_Back_Porch + `H_Left_Border - 1'b1 ;localparam Hdat_end = `H_Total_Time - `H_Right_Border - `H_Front_Porch - 1'b1 ;localparam Hpixel_end = `H_Total_Time - 1'b1 ;localparam VGA_VS_end = `V_Sync_Time - 1'b1 ;localparam Vdat_begin = `V_Sync_Time + `V_Back_Porch + `V_Top_Border - 1'b1 ;localparam Vdat_end = `V_Total_Time - `V_Bottom_Border - `V_Front_Porch - 1'b1 ;localparam Vline_end = `V_Total_Time - 1'b1 ;//行计数器reg[11:0]H_cnt;always@(posedge clk or negedge reset_n)if(!reset_n)    H_cnt <= 0 ;else if(H_cnt == Hpixel_end)H_cnt <= 0 ;else H_cnt <= H_cnt + 1'b1 ;// 场计数器reg[11:0]V_cnt;always@(posedge clk or negedge reset_n)if(!reset_n)    V_cnt <= 0 ;else if(H_cnt == Hpixel_end)if(V_cnt == Vline_end)V_cnt <= 0 ;else V_cnt <= V_cnt + 1'b1 ;else V_cnt <= V_cnt ;//     VGA_HSalways@(posedge clk or negedge reset_n)if(!reset_n)  VGA_HS <= 1;else if(H_cnt == 0) VGA_HS <= 0;else if(H_cnt > VGA_HS_end) VGA_HS <= 1;//     VGA_VSalways@(posedge clk or negedge reset_n)if(!reset_n)  VGA_VS <= 1;else if(V_cnt == 0) VGA_VS <= 0;else if(V_cnt > VGA_VS_end) VGA_VS <= 1;  //     data_reqalways@(posedge clk or negedge reset_n)if(!reset_n)    data_req <= 0 ;else data_req <= ((H_cnt >= Hdat_begin)&&(H_cnt < Hdat_end)&&(V_cnt >= Vdat_begin)&&(V_cnt <= Vdat_end)) ? 1 : 0;//     VGA_BLKalways@(posedge clk or negedge reset_n)if(!reset_n)    VGA_BLK <= 0 ;else VGA_BLK <= data_req ;//    assign VGA_RGB = VGA_BLK? Data:0;//     VGA_RGBalways@(posedge clk )if(data_req) VGA_RGB <= data;elseVGA_RGB <= 0;//addressalways@(posedge clk )if(data_req)beginH_addr <= H_cnt - Hdat_begin;V_addr <= V_cnt - Vdat_begin;endelsebeginH_addr <= 0;V_addr <= 0;end 
endmodule

6.2 VGA_CTRL_RGB565.xdc


set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[15]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[14]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[13]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[12]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[11]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[10]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[9]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[8]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {VGA_RGB[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports reset_n]
set_property IOSTANDARD LVCMOS33 [get_ports VGA_BLK]
set_property IOSTANDARD LVCMOS33 [get_ports TFT_BL]
set_property IOSTANDARD LVCMOS33 [get_ports VGA_CLK]
set_property IOSTANDARD LVCMOS33 [get_ports VGA_HS]
set_property IOSTANDARD LVCMOS33 [get_ports VGA_VS]
set_property PACKAGE_PIN W20 [get_ports {VGA_RGB[15]}]
set_property PACKAGE_PIN W19 [get_ports {VGA_RGB[14]}]
set_property PACKAGE_PIN V17 [get_ports {VGA_RGB[13]}]
set_property PACKAGE_PIN V16 [get_ports {VGA_RGB[12]}]
set_property PACKAGE_PIN T15 [get_ports {VGA_RGB[11]}]
set_property PACKAGE_PIN V20 [get_ports {VGA_RGB[10]}]
set_property PACKAGE_PIN U17 [get_ports {VGA_RGB[9]}]
set_property PACKAGE_PIN V18 [get_ports {VGA_RGB[8]}]
set_property PACKAGE_PIN T16 [get_ports {VGA_RGB[7]}]
set_property PACKAGE_PIN R16 [get_ports {VGA_RGB[6]}]
set_property PACKAGE_PIN U19 [get_ports {VGA_RGB[5]}]
set_property PACKAGE_PIN Y19 [get_ports {VGA_RGB[4]}]
set_property PACKAGE_PIN W18 [get_ports {VGA_RGB[3]}]
set_property PACKAGE_PIN Y18 [get_ports {VGA_RGB[2]}]
set_property PACKAGE_PIN W16 [get_ports {VGA_RGB[1]}]
set_property PACKAGE_PIN Y17 [get_ports {VGA_RGB[0]}]
set_property PACKAGE_PIN W14 [get_ports VGA_VS]
set_property PACKAGE_PIN U14 [get_ports VGA_HS]
set_property PACKAGE_PIN U15 [get_ports VGA_CLK]
set_property PACKAGE_PIN R17 [get_ports TFT_BL]
set_property PACKAGE_PIN U18 [get_ports clk]
set_property PACKAGE_PIN H18 [get_ports reset_n]
set_property PACKAGE_PIN W15 [get_ports VGA_BLK]

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

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

相关文章

活动图高阶讲解-16

77 00:05:39,520 --> 00:05:41,520 另外一个就是循环 78 00:05:41,520 --> 00:05:45,520 如果怎么样 79 00:05:45,520 --> 00:05:47,520 就再做一遍 80 00:05:47,520 --> 00:05:49,520 如果还满足条件就再做一遍 81 00:05:49,520 --> 00:05:51,520 那就是循…

TG-12F使用SDK对接阿里生活物联网平台

文章目录 前言一、注意二、准备1. 安装Ubuntu&#xff08;版本20.04 X64&#xff09;程序运行时库。按顺序逐条执行命令&#xff1a;2. 安装Ubuntu&#xff08;版本20.04 X64&#xff09;依赖软件包。按照顺序逐条执行命令&#xff1a;3. 安装Python依赖包。按照顺序逐条执行命…

[spring] Spring Boot REST API - CRUD 操作

Spring Boot REST API - CRUD 操作 这里主要提一下 spring boot 创建 rest api&#xff0c;并对其进行 CRUD 操作 jackson & gson 目前浏览器和服务端主流的交互方式是使用 JSON(JavaScript Object Notation)&#xff0c;但是 JSON 没有办法直接和 Java 的 POJO 创建对应…

python-numpy(3)-线性代数

一、方程求解 参考资料 对于Ax b 这种方程&#xff1a; np.linalg.inv(A).dot(B)np.linalg.solve(A,b) 1.1 求解多元一次方程一个直观的例子 # AXB # X A^(-1)*B A np.array([[7, 3, 0, 1], [0, 1, 0, -1], [1, 0, 6, -3], [1, 1, -1, -1]]) B np.array([8, 6, -3, 1]…

cannot import name ‘get_host‘ from ‘urllib3.util.url‘

Error in py_module_import(module, convert convert) : ImportError: cannot import name get_host from urllib3.util.url (D:\\url.py) Run reticulate::py_last_error() for details. 这个错误表明在 urllib3 模块的 util.url 子模块中找不到名为 get_host 的函数。这可能…

第十五届蓝桥杯省赛C/C++大学B组真题及赛后总结

目录 个人总结 C/C 组真题 握手问题 小球反弹 好数 R 格式 宝石组合 数字接龙 爬山 拔河 ​编辑 再总结及后续规划 个人总结 第一次参加蓝桥杯&#xff0c;大二&#xff0c;以前都在在学技术&#xff0c;没有系统的学过算法。所以&#xff0c;还是花了挺多时间去备…

Rust - 所有权

所有的程序都必须和计算机内存打交道&#xff0c;如何从内存中申请空间来存放程序的运行内容&#xff0c;如何在不需要的时候释放这些空间&#xff0c;成了重中之重&#xff0c;也是所有编程语言设计的难点之一。在计算机语言不断演变过程中&#xff0c;出现了三种流派&#xf…

基于深度学习的花卉检测系统(含PyQt界面)

基于深度学习的花卉检测系统&#xff08;含PyQt界面&#xff09; 前言一、数据集1.1 数据集介绍1.2 数据预处理 二、模型搭建三、训练与测试3.1 模型训练3.2 模型测试 四、PyQt界面实现参考资料 前言 本项目是基于swin_transformer深度学习网络模型的花卉检测系统&#xff0c;…

软考125-上午题-【软件工程】-传统软件的测试策略

一、传统软件的测试策略 有效的软件测试实际上分为4步进行&#xff0c;即&#xff1a;单元测试、集成测试、确认测试、系统测试。 1-1、单元测试&#xff08;模块测试&#xff09; 单元测试也称为模块测试&#xff0c;在模块编写完成且无编译错误后就可以进行。 单元测试侧重…

温故知新之-TCP Keepalive机制及长短连接

[学习记录] 前言 TCP连接一旦建立&#xff0c;只要连接双方不主动 close &#xff0c;连接就会一直保持。但建立连接的双方并不是一直都存在数据交互&#xff0c;所以在实际使用中会存在两种情况&#xff1a;一种是每次使用完&#xff0c;主动close&#xff0c;即短连接&…

JVM虚拟机(五)强引用、软引用、弱引用、虚引用

目录 一、强引用二、软引用三、弱引用四、虚引用五、总结 引文&#xff1a; 在 Java 中一共存在 4 种引用&#xff1a;强、软、弱、虚。它们主要指的是&#xff0c;在进行垃圾回收的时候&#xff0c;对于不同的引用垃圾回收的情况是不一样的。下面我们就一起来看一下这 4 种引用…

51单片机实验03-单片机定时/计数器实验

目录 一、实验目的 二、实验说明 1、51单片机有两个16位内部计数器/定时器&#xff08;C/T&#xff0c; Counter/Timer&#xff09;。 2、模式寄存器TMOD 1) M1M0工作模式控制位&#xff1b; 2) C/T定时器或计数器选择位&#xff1a; 3&#xff09;GATE定时器/计数器运行…

软考系规第2章思维导图,软硬件网络和次新技术大杂烩

虽然目前系统规划与管理师的教程是否改版存在不确定性&#xff0c;但是不影响咱们先概要了解当前的教程&#xff0c;使用思维导图的方式粗读教程。 为了帮助你更好的学习系规教程&#xff0c;降低系规教程阅读门槛&#xff0c;指尖疯特发起了教程伴读活动&#xff0c;通过伴读脑…

关于GDAL计算图像坐标的几个问题

关于GDAL计算图像坐标的几个问题_gdal读取菱形四角点坐标-CSDN博客 这篇文章写的很好&#xff0c;讲清楚了图像行列号与图像点坐标&#xff08;x,y&#xff09;对应关系&#xff0c;以及图像行列号如何转为地理坐标的&#xff0c;转载一下做个备份。 1.关于GDAL计算图像坐标的…

部署Kafka集群图文详细步骤

1 集群规划 共三台虚拟机同处overlay网段&#xff0c;每台虚拟机部署一套kafka和zookeeper&#xff0c;kafka_manager安装其中一台虚拟机上即可。 HostnameIP addrPortListenerzk1docker-swarm分配2183:2181zk2docker-swarm分配2184:2181zk3docker-swarm分配2185:2181k1docke…

python-使用bottle时间简易服务器

python-使用bottle时间简易服务器 背景调试读取文本所有内容字段解释json字符串解析追加写入文件 整理后整理后写入文件方法将目录下所有文本的内容批量追加到一个文本搜索字符串方法实现简易服务器通过浏览器访问 背景 202310.txt内容是一段json字符串&#xff0c;目的是通过…

C++进阶技巧:如何在同一对象中存储左值或右值

如何在同一对象中存储左值或右值 一、背景二、跟踪值2.1、存储引用2.2、存储值 三、存储variant四、通用存储类4.1、定义const访问4.2、定义非const访问 五、创建存储六、总结 一、背景 C 代码似乎经常出现一个问题&#xff1a;如果该值可以来自左值或右值&#xff0c;则对象如…

Arrow, 一个六边形的 Python 时间库

文章目录 Arrow, 一个六边形的 Python 时间库第一部分&#xff1a;背景介绍第二部分&#xff1a;库是什么&#xff1f;第三部分&#xff1a;如何安装这个库&#xff1f;第四部分&#xff1a;库函数使用方法第五部分&#xff1a;场景应用第六部分&#xff1a;常见Bug及解决方案第…

代码学习记录42---动态规划

随想录日记part42 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.04.14 主要内容&#xff1a;今天开始要学习动态规划的相关知识了&#xff0c;今天的内容主要涉及&#xff1a;最长递增子序列 &#xff1b;最长连续递增序列 &#xff1b;最长重复子数组 ;最长公…

关于部署ELK和EFLK的相关知识

文章目录 一、ELK日志分析系统1、ELK简介1.2 ElasticSearch1.3 Logstash1.4 Kibana&#xff08;展示数据可视化界面&#xff09;1.5 Filebeat 2、使用ELK的原因3、完整日志系统的基本特征4、ELK的工作原理 二、部署ELK日志分析系统1、服务器配置2、关闭防火墙3、ELK ElasticSea…