串口发送+RAM+VGA传图

  • 前言
  • 一、结构总体设计
  • 二、顶层模块
  • 三、img_rx_wr模块
  • 四、UART_rx模块
  • 五、VGA_CTRL模块
  • 六、parameter.v文件
  • 七、clk_IP和RAM_IP配置
  • 八、仿真文件展示
  • 九、上板演示

前言

本文使用串口发送模块发送数据存储到RAM中,通过RAM读取数据传输图片给TFT显示屏。


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

一、结构总体设计

1.UART_RAM_TFT总体设计草图

2.img_rx_wr(RAM写入逻辑)设计草图

二、顶层模块

代码如下:

`timescale 1ns / 1psmodule UART_RAM_TFT(Clk,Reset_n,uart_rx,VGA_RGB,//TFT数据输出VGA_HS, //TFT行同步信号VGA_VS, //TFT场同步信号VGA_BLK,        //VGA 场消隐信号VGA_CLK,TFT_BL  //背光
);input Clk;input Reset_n;input uart_rx;output [15:0]VGA_RGB;output VGA_HS;output VGA_VS;output VGA_BLK;     //VGA 场消隐信号output VGA_CLK; output TFT_BL;wire [7:0]rx_data;wire rx_done;wire ram_wren;wire [15:0]ram_wraddr;wire [15:0]ram_wrdata;reg [15:0]ram_rdaddr;wire Clk_TFT;wire [15:0]ram_rddata;assign VGA_CLK = Clk_TFT;assign TFT_BL = 1;MMCM MMCM(.clk_out1(Clk_TFT),.clk_in1(Clk));uart_byte_rx uart_byte_rx(.Clk(Clk),.Reset_n(Reset_n),.Baud_Set(4),.uart_rx(uart_rx),.Data(rx_data),.Rx_Done(rx_done)  ); img_rx_wr img_rx_wr(.Clk(Clk),.Reset_n(Reset_n),.rx_data(rx_data),.rx_done(rx_done),.ram_wren(ram_wren),.ram_wraddr(ram_wraddr),.ram_wrdata(ram_wrdata));RAM RAM (.clka(Clk),    // input wire clka.ena(1),      // input wire ena.wea(ram_wren),      // input wire [0 : 0] wea.addra(ram_wraddr),  // input wire [15 : 0] addra.dina(ram_wrdata),    // input wire [15 : 0] dina.clkb(Clk_TFT),    // input wire clkb.enb(1),      // input wire enb.addrb(ram_rdaddr),  // input wire [15 : 0] addrb.doutb(ram_rddata)  // output wire [15 : 0] doutb);wire Data_Req;wire [11:0]hcount,vcount;wire [15:0]disp_data;VGA_CTRL VGA_CTRL(.Clk(Clk_TFT),    //系统输入时钟33MHZ.Reset_n(Reset_n),.Data(disp_data),    //待显示数据.Data_Req(Data_Req),.hcount(hcount),        //VGA行扫描计数器.vcount(vcount),        //VGA场扫描计数器.VGA_RGB(VGA_RGB),  //VGA数据输出.VGA_HS(VGA_HS),        //VGA行同步信号.VGA_VS(VGA_VS),        //VGA场同步信号.VGA_BLK(VGA_BLK)      //VGA 场消隐信号);//RAM中存储的图像是256*256的像素矩阵wire ram_data_en;assign ram_data_en = Data_Req && (hcount <= 255) && (vcount <= 255);always@(posedge Clk_TFT or negedge Reset_n)if(!Reset_n)ram_rdaddr <= 0;else if(ram_data_en)ram_rdaddr <= ram_rdaddr + 1'd1;wire data_en;wire [7:0]R ,G ,B;assign R = 8'hFF,G = 8'h00,B = 8'h00;wire [15:0]RED; assign RED = {R[7:3],G[7:2],B[7:3]};assign data_en = Data_Req && (hcount <= 257) && (vcount <= 255);assign disp_data = data_en? ram_rddata:RED;//将多余图像显示红色//assign disp_data = ram_data_en? ram_rddata:0;    //将多余数据归0显示黑色endmodule

三、img_rx_wr模块

module img_rx_wr(Clk,Reset_n,rx_data,rx_done,ram_wren,ram_wraddr,ram_wrdata
);input Clk;input Reset_n;input [7:0]rx_data;    //串口数据input rx_done;         //串口发送停止信号output reg ram_wren;   //开始写入信号output reg[15:0]ram_wraddr;   //RAM核写入地址output [15:0]ram_wrdata;      //写入数据reg [15:0]rx_data_tmp;reg [16:0]data_cnt; //统计串口接收的数据个数计数器always@(posedge Clk or negedge Reset_n)if(!Reset_n) data_cnt <= 0;else if(rx_done)data_cnt <= data_cnt + 1'd1;always@(posedge Clk or negedge Reset_n)if(!Reset_n) rx_data_tmp <= 0;else if(rx_done)     //串口一次发一个字节,RGB565一次需要2个字节rx_data_tmp <= {rx_data_tmp[7:0], rx_data};//---------------------------------------------------------------//17'h0      ...0000//17'h1      ...0001//17'h2      ...0010//根据规律奇数末位为1
//---------------------------------------------------------------       always@(posedge Clk or negedge Reset_n)if(!Reset_n) ram_wren <= 0;else if(rx_done && data_cnt[0])    //每两个字节进行一次写入ram_wren <= 1'd1;elseram_wren <= 0;always@(posedge Clk or negedge Reset_n)if(!Reset_n) ram_wraddr <= 0;else if(rx_done && data_cnt[0]) ram_wraddr <= data_cnt[16:1];  //data_cnt/2    assign ram_wrdata = rx_data_tmp;endmodule

四、UART_rx模块

`timescale 1ns/1nsmodule uart_byte_rx(Clk,Reset_n,Baud_Set,uart_rx,Data,Rx_Done,
);input Clk;input Reset_n;input [2:0]Baud_Set;input uart_rx;output reg[7:0]Data; output reg Rx_Done;reg [1:0]sync_uart_rx;always@(posedge Clk)beginsync_uart_rx[0] <= #1 uart_rx;sync_uart_rx[1] <= #1 sync_uart_rx[0] ;endreg [1:0]uart_rx_r;always@(posedge Clk)beginuart_rx_r[0] <= #1 sync_uart_rx[1];uart_rx_r[1] <= #1 uart_rx_r[0] ;endwire pedge_uart_rx;
//    assign pedge_uart_rx = ((uart_rx_r[1] == 0) && (uart_rx_r[0] == 1));assign pedge_uart_rx = (uart_rx_r == 2'b01);wire nedge_uart_rx;
//    assign nedge_uart_rx = ((uart_rx_r[1] == 1) && (uart_rx_r[0] == 0));  assign nedge_uart_rx = (uart_rx_r == 2'b10);  reg [8:0]  Bps_DR;always@(*)case(Baud_Set)0:Bps_DR = 1000000000/9600/16/20 - 2;1:Bps_DR = 1000000000/19200/16/20 -2;2:Bps_DR = 1000000000/38400/16/20 - 2;3:Bps_DR = 1000000000/57600/16/20 - 2;4:Bps_DR = 1000000000/115200/16/20 - 2;5:Bps_DR = 1000000000/1562500/16/20 - 2;default:Bps_DR = 1000000000/9600/16/20 - 1;endcasewire bps_clk_16x;assign bps_clk_16x = (div_cnt == Bps_DR / 2);reg RX_EN;always@(posedge Clk or negedge Reset_n)if(!Reset_n) RX_EN <= #1 0;else if(nedge_uart_rx)RX_EN <= #1 1;else if(Rx_Done || (sta_bit >= 4))RX_EN <= #1 0;reg [8:0]div_cnt;always@(posedge Clk or negedge Reset_n)if(!Reset_n)    div_cnt <= #1 0;else if(RX_EN)beginif(div_cnt == Bps_DR)div_cnt <= #1 0;elsediv_cnt <= #1 div_cnt + 1'b1;endelsediv_cnt <= #1 0;reg [7:0]bps_cnt;always@(posedge Clk or negedge Reset_n)if(!Reset_n) bps_cnt <= #1 0;else if(RX_EN)beginif(bps_clk_16x)beginif(bps_cnt == 160)bps_cnt <= #1 0;elsebps_cnt <= #1 bps_cnt + 1'b1;endelsebps_cnt <= #1 bps_cnt;endelsebps_cnt <= #1 0;//reg width name number/depthreg[2:0]r_data[7:0];reg [2:0]sta_bit;reg [2:0]sto_bit;always@(posedge Clk or negedge Reset_n)if(!Reset_n) beginsta_bit <= #1 0;sto_bit <= #1 0;r_data[0] <= #1 0;r_data[1] <= #1 0;r_data[2] <= #1 0;r_data[3] <= #1 0;r_data[4] <= #1 0;r_data[5] <= #1 0;r_data[6] <= #1 0;r_data[7] <= #1 0;endelse if(bps_clk_16x)begincase(bps_cnt)0:beginsta_bit <= #1 0;sto_bit <= #1 0;r_data[0] <= #1 0;r_data[1] <= #1 0;r_data[2] <= #1 0;r_data[3] <= #1 0;r_data[4] <= #1 0;r_data[5] <= #1 0;r_data[6] <= #1 0;r_data[7] <= #1 0;end5,6,7,8,9,10,11:sta_bit <= #1 sta_bit + sync_uart_rx[1];21,22,23,24,25,26,27: r_data[0] <= #1 r_data[0] + sync_uart_rx[1];37,38,39,40,41,42,43: r_data[1] <= #1 r_data[1] + sync_uart_rx[1];53,54,55,56,57,58,59: r_data[2] <= #1 r_data[2] + sync_uart_rx[1];69,70,71,72,73,74,75: r_data[3] <= #1 r_data[3] + sync_uart_rx[1];85,86,87,88,89,90,91: r_data[4] <= #1 r_data[4] + sync_uart_rx[1];101,102,103,104,105,106,107: r_data[5] <= #1 r_data[5] + sync_uart_rx[1];117,118,119,120,121,122,123: r_data[6] <= #1 r_data[6] + sync_uart_rx[1];133,134,135,136,137,138,139: r_data[7] <= #1 r_data[7] + sync_uart_rx[1];149,150,151,152,153,154,155: sto_bit <= #1 sto_bit + sync_uart_rx[1];default:;endcaseendalways@(posedge Clk or negedge Reset_n)if(!Reset_n) Data <= #1 0;        else if(bps_clk_16x && (bps_cnt == 159))beginData[0] <= #1 (r_data[0] >= 4)?1'b1:1'b0;Data[1] <= #1 (r_data[1] >= 4)?1'b1:1'b0;Data[2] <= #1 (r_data[2] >= 4)?1'b1:1'b0;Data[3] <= #1 (r_data[3] >= 4)?1'b1:1'b0;Data[4] <= #1 (r_data[4] >= 4)?1'b1:1'b0;Data[5] <= #1 (r_data[5] >= 4)?1'b1:1'b0;Data[6] <= #1 (r_data[6] >= 4)?1'b1:1'b0;Data[7] <= #1 (r_data[7] >= 4)?1'b1:1'b0;end //    always@(posedge Clk or negedge Reset_n)
//    if(!Reset_n)
//        Data <= #1 0;
//    else if(bps_clk_16x && (bps_cnt == 159))begin
//        Data[0] <= #1 r_data[0][2];
//        Data[1] <= #1 r_data[1][2];
//        Data[2] <= #1 r_data[2][2];
//        Data[3] <= #1 r_data[3][2];
//        Data[4] <= #1 r_data[4][2];
//        Data[5] <= #1 r_data[5][2];
//        Data[6] <= #1 r_data[6][2];
//        Data[7] <= #1 r_data[7][2];
//    end always@(posedge Clk or negedge Reset_n)if(!Reset_n) Rx_Done <= #1 0;else if((div_cnt == Bps_DR/2) && (bps_cnt == 160))Rx_Done <= #1 1;elseRx_Done <= #1 0; endmodule

五、VGA_CTRL模块

module VGA_CTRL(Clk,Reset_n,Data,Data_Req,hcount,vcount,VGA_HS,VGA_VS,VGA_BLK,VGA_RGB
);input Clk;input Reset_n;input [15:0]Data;output reg Data_Req;output reg [11:0]hcount; //当前扫描点的H坐标output reg [11:0]vcount; //当前扫描点的V坐标output VGA_HS;output VGA_VS; output VGA_BLK;output reg [15:0]VGA_RGB;//{R[4:0]、G[5:0]、B[4:0]}`include "vga_parameter.v"localparam Hsync_End = `H_Total_Time;localparam HS_End = `H_Sync_Time;localparam Hdat_Begin = `H_Sync_Time + `H_Back_Porch + `H_Left_Border;localparam Hdat_End = `H_Sync_Time + `H_Left_Border + `H_Back_Porch + `H_Data_Time;localparam Vsync_End = `V_Total_Time;localparam VS_End = `V_Sync_Time;localparam Vdat_Begin =  `V_Sync_Time + `V_Back_Porch + `V_Top_Border;localparam Vdat_End = `V_Sync_Time + `V_Back_Porch + `V_Top_Border + `V_Data_Time;reg [11:0]hcnt;//行扫描计数器always@(posedge Clk or negedge Reset_n)if(!Reset_n)hcnt <= 0;else if(hcnt >= Hsync_End -1)hcnt <= 0;elsehcnt <= hcnt + 1'b1;//RAM_IP核输出数据有三拍延迟此处为了对齐数据传输reg [3:0]VGA_HS_r;always@(posedge Clk)beginVGA_HS_r[0] <= (hcnt < HS_End)?0:1;VGA_HS_r[3:1] <= VGA_HS_r[2:0];        endassign VGA_HS = VGA_HS_r[2];reg [11:0]vcnt;//场扫描计数器always@(posedge Clk or negedge Reset_n)if(!Reset_n)vcnt <= 0;else if(hcnt == Hsync_End -1)beginif(vcnt >= Vsync_End -1)vcnt <= 0;elsevcnt <= vcnt + 1'd1;endelsevcnt <= vcnt;//RAM_IP核输出数据有三拍延迟此处为了对齐数据传输reg [3:0]VGA_VS_r;   always@(posedge Clk)beginVGA_VS_r[0]  <= (vcnt < VS_End)?0:1;VGA_VS_r[3:1] <= VGA_VS_r[2:0];endassign VGA_VS = VGA_VS_r[2];//BLK表示的就是输出输出的时间段
//    assign VGA_BLK = ((hcnt >= Hdat_Begin - 1) && (hcnt < Hdat_End - 1) && (vcnt >= Vdat_Begin - 1) && (vcnt < Vdat_End))?1:0;
//    always@(posedge Clk)
//         VGA_BLK <= ((hcnt >= Hdat_Begin - 1) && (hcnt < Hdat_End - 1) && (vcnt >= Vdat_Begin - 1) && (vcnt < Vdat_End))?1:0;   always@(posedge Clk)Data_Req <= ((hcnt >= Hdat_Begin - 1) && (hcnt < Hdat_End - 1) && (vcnt >= Vdat_Begin) && (vcnt < Vdat_End))?1:0;//RAM_IP核输出数据有三拍延迟此处为了对齐数据传输reg [3:0]VGA_BLK_r;always@(posedge Clk)beginVGA_BLK_r[0] <= Data_Req;VGA_BLK_r[3:1] <= VGA_BLK_r[2:0];endassign VGA_BLK = VGA_BLK_r[3];//    assign VGA_RGB = VGA_BLK? Data:0;always@(posedge Clk)VGA_RGB <= Data_Req? Data:0;always@(posedge Clk)hcount <= Data_Req? hcnt - Hdat_Begin:0; always@(posedge Clk)vcount <= Data_Req? (vcnt - Vdat_Begin):vcount;          endmodule

六、parameter.v文件

//`define Resolution_480x272 1  //刷新率为60Hz时像素时钟为9MHz
//`define Resolution_640x480 1 //刷新率为60Hz时像素时钟为25.175MHz
`define Resolution_800x480 1   //刷新率为60Hz时像素时钟为33MHz
//`define Resolution_800x600 1 //刷新率为60Hz时像素时钟为40MHz
//`define Resolution_1024x768 1    //刷新率为60Hz时像素时钟为65MHz
//`define Resolution_1280x720 1    //刷新率为60Hz时像素时钟为74.25MHz
//`define Resolution_1920x1080 1   //刷新率为60Hz时像素时钟为148.5MHz`ifdef Resolution_480x272    `define H_Right_Border 0`define H_Front_Porch 2`define H_Sync_Time 41`define H_Back_Porch 2`define H_Left_Border 0`define H_Data_Time 480`define H_Total_Time 525`define V_Bottom_Border 0`define V_Front_Porch 2`define V_Sync_Time 10`define V_Back_Porch 2`define V_Top_Border 0`define V_Data_Time 272`define V_Total_Time 286`elsif Resolution_640x480`define H_Total_Time  12'd800`define H_Right_Border  12'd8`define H_Front_Porch  12'd8`define H_Sync_Time  12'd96`define H_Data_Time 12'd640`define H_Back_Porch  12'd40`define H_Left_Border  12'd8`define V_Total_Time  12'd525`define V_Bottom_Border  12'd8`define V_Front_Porch  12'd2`define V_Sync_Time  12'd2`define V_Data_Time 12'd480`define V_Back_Porch  12'd25`define V_Top_Border  12'd8`elsif Resolution_800x480`define H_Total_Time 12'd1056`define H_Right_Border 12'd0`define H_Front_Porch 12'd40`define H_Sync_Time 12'd128`define H_Data_Time 12'd800`define H_Back_Porch 12'd88`define H_Left_Border 12'd0`define V_Total_Time 12'd525`define V_Bottom_Border 12'd8`define V_Front_Porch 12'd2`define V_Sync_Time 12'd2`define V_Data_Time 12'd480`define V_Back_Porch 12'd25`define V_Top_Border 12'd8`elsif Resolution_800x600`define H_Total_Time 12'd1056`define H_Right_Border 12'd0`define H_Front_Porch 12'd40`define H_Sync_Time 12'd128`define H_Data_Time 12'd800`define H_Back_Porch 12'd88`define H_Left_Border 12'd0`define V_Total_Time 12'd628`define V_Bottom_Border 12'd0`define V_Front_Porch 12'd1`define V_Sync_Time 12'd4`define V_Data_Time 12'd600`define V_Back_Porch 12'd23`define V_Top_Border 12'd0`elsif Resolution_1024x768`define H_Total_Time 12'd1344`define H_Right_Border 12'd0`define H_Front_Porch 12'd24`define H_Sync_Time 12'd136`define H_Data_Time 12'd1024`define H_Back_Porch 12'd160`define H_Left_Border 12'd0`define V_Total_Time 12'd806`define V_Bottom_Border 12'd0`define V_Front_Porch 12'd3`define V_Sync_Time 12'd6`define V_Data_Time 12'd768`define V_Back_Porch 12'd29`define V_Top_Border 12'd0`elsif Resolution_1280x720`define H_Total_Time 12'd1650`define H_Right_Border 12'd0`define H_Front_Porch 12'd110`define H_Sync_Time 12'd40`define H_Data_Time 12'd1280`define H_Back_Porch 12'd220`define H_Left_Border 12'd0`define V_Total_Time 12'd750`define V_Bottom_Border 12'd0`define V_Front_Porch 12'd5`define V_Sync_Time 12'd5`define V_Data_Time 12'd720`define V_Back_Porch 12'd20`define V_Top_Border 12'd0`elsif Resolution_1920x1080`define H_Total_Time 12'd2200`define H_Right_Border 12'd0`define H_Front_Porch 12'd88`define H_Sync_Time 12'd44`define H_Data_Time 12'd1920`define H_Back_Porch 12'd148`define H_Left_Border 12'd0`define V_Total_Time 12'd1125`define V_Bottom_Border 12'd0`define V_Front_Porch 12'd4`define V_Sync_Time 12'd5`define V_Data_Time 12'd1080`define V_Back_Porch 12'd36`define V_Top_Border 12'd0  `endif

七、clk_IP和RAM_IP配置

具体IP配置根据所需选择,可参考我之前文章,自行根据所需配置。

八、仿真文件展示

`timescale 1ns / 1psmodule UART_RAM_TFT_tb();reg Clk;reg Reset_n;reg uart_rx;wire [15:0]VGA_RGB;wire VGA_HS;wire VGA_VS;wire VGA_BLK;     //VGA 场消隐信号wire VGA_CLK; wire TFT_BL;UART_RAM_TFT UART_RAM_TFT(Clk,Reset_n,uart_rx,VGA_RGB,//TFT数据输出VGA_HS, //TFT行同步信号VGA_VS, //TFT场同步信号VGA_BLK,        //VGA 场消隐信号VGA_CLK,TFT_BL  //背光);initial Clk = 1;always#10 Clk = ~Clk;initial beginReset_n = 0;#201;Reset_n = 1;#2000;#2000000;$stop;end    endmodule

九、上板演示


串口传图展示:


【附件:】链接:https://pan.baidu.com/s/1wWgnTeCfzlFzGWUCQe7ANg?pwd=mnz3
提取码:mnz3

串口发送+RAM+VGA传图相关推荐

  1. FPGA uart+sdram+vga传图

    项目介绍 注意事项 这个练手项目本来在七月份就完成了,但是其中有个bug我怎么改也改不了,其中的sdram看了下b站上明德扬的sdram视频,然后借鉴了他们的摄像头采集模块的sdram代码,这里的主要 ...

  2. 串口发送图片VGA显示

    做fpga的图像处理,发送图片是比较简单的一步.使用ram结合串口及vga显示部分就可以很好的实现此功能. 实验目标: 使用uart发送大小为100*100的图片到vga显示屏幕上 实现思路: 十六位 ...

  3. USART串口协议和USART串口外设(USART串口发送串口发送和接收)

    1.通信接口 A.基本概念 • 通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统 • 通信协议:制定通信的规则,通信双方按照协议规则进行数据收发  异步:需要双方约定一个频率 B.数据通信方 ...

  4. 相信我,SDRAM真的不难(九)----基于SDRAM缓存的串口传图综合实战(UART + SDRAM + VGA)

    写在前面 本文是SDRAM系列文章的第九篇,前面八篇已经实现了一个简单的SDRAM控制器.正所谓光说不练云玩家,接下来我们搞搞实战,真正把SDRAM给用起来. 本文将结合UART模块.VGA模块.SD ...

  5. 基于 DDR3 的串口传图帧缓存系统设计实现(整体设计)

    文章目录 前言 一.串口传图顶层系统设计框图 二.各模块说明 三.系统工程及 IP 创建 四.uart_ddr3_tft模块 五.uart_ddr3_tft模块仿真文件 六.传图展示 前言 结合串口接 ...

  6. 基于 DDR3 的串口传图帧缓存系统设计实现(fifo2mig_axi )

    文章目录 前言 一.接口转换模块设计 二.fifo2mig_axi 模块 二.接口转换模块仿真 四.fifo2mig_axi_tb 五.仿真展示 前言 结合串口接收模块和 tft 显示屏控制模块,设计 ...

  7. c++ grpc 实现一个传图服务(异步方式,流式接收与发送)

    ~!转载请注明出处 异步传输官方示例只给了普通Unary元对象的传输,没有流式传输示例,经过摸索调试,实现了grpc的异步流式传输(目前只是单向流,服务端推流至客户端,或者客户端上送流至服务端). 1 ...

  8. 用20块的摄像头(不带fifo的OV7670)做WiFi实时传图小车

    博客地址 用20块的摄像头(不带fifo的OV7670)做WiFi实时传图小车 – Infinite's Blog 零.导读 在这篇文章中,你将看到如下内容: OV7670 QVGA配置的注意事项: ...

  9. esp32拍照传输到手机android,ESP32 之 esp32-cam wifi拍照传图系统2

    ESP32 之 esp32-cam wifi拍照传图系统2 ESP32 之 esp32-cam wifi拍照传图系统2 ESP32 之 esp32-cam wifi拍照传图系统 补充说明 ESP32- ...

最新文章

  1. excel中使用CORREL函数计算两个时间序列数据列之间的滚动相关性(Rolling correlations)、例如,计算两种商品销售额之间的3个月的滚动相关性
  2. 【错误记录】Kotlin 编译报错 ( Not nullable value required to call an ‘iterator()‘ method on for-loop range )
  3. spring和CXF集成来实现webservices
  4. ios15之取消UITabbleViewCell的高亮效果
  5. [牛客数据库SQL实战] 11~20题及个人解答
  6. 谁在阻止RSS的普及??
  7. 3DEC离散元数值模拟技术与应用
  8. MODIS数据的简介和下载(二)——MODIS数据下载方式(FTP)
  9. CASS11.0.0.6安装以及教程
  10. 微信小程序picker选择器(下拉框)以及传值问题
  11. gyp ERR! stack Error: EACCES: permission denied,解决
  12. bootloader recovery
  13. 计算机领域十大世界难题,世界四大科学难题是什么,什么是四大科学难题
  14. 【100%通过率】华为OD机试真题 Python 实现【微服务的集成测试】【2023 Q1 | 100分】
  15. linux微信原生版2.1.5,优麒麟版重新打包,适用于debian内核系统
  16. 进阶项目(12)PS2键盘驱动程序设计讲解
  17. 20 人机猜拳互动游戏开发
  18. 【每日新闻】阿里云回应大规模故障:运维操作失误 将认真改进 | 分析师:Azure已取代Windows成为微软新的增长点...
  19. LAMP环境搭建之编译安装指南(php-5.3.27.tar.gz)
  20. 电脑装机兼容性测试软件,四款产品内部兼容性测试

热门文章

  1. 【只摘金句】Linux 开发模式带给创业者的启示
  2. Android 自定义Dialog 里面有EditText控件点击关闭输入法失效的问题
  3. 清茶一杯-手机、电子阅读器和生活
  4. DICOM医学影像协议
  5. 新版openwrt配置vlan 拨号-局域网-iptv
  6. OpenCV批量处理图片
  7. 入门量化分析(金融)的一些建议
  8. [CTF从0到1学习] 一、CTF 概述
  9. 如何在Fcpx中卸载安装效果,标题,转场等FCPX模板插件
  10. java生成图片,特殊字符显示方框问题解决