【FPGA/verilog -入门学习17】vivado 实现串口自发自收程序

1,需求

PC使用串口助手给FPGA板发送9600 波特率的数据,FPGA板接收到数据后,回复同样的数据给PC

2,需求分析

按模块可以划分为:

rx接收模块,将输入的8位并行rx 数据转换成[7:0]rx_data 信号,当数据接收完成后,同时生成一个rx_done 信号。

bsp_generate_clk_en:接收波特率时钟产生模块,当rx接收到数据时,给一个start信号给波特率时钟产生模块,由bsp时钟产生模块按9600波特率产生时钟使能信号bsp_generate_clk_en 用于同步rx 接收模块接收数据的时序。

tx发送模块:当接收到来子rx 接收模块发过来的rx_done 信号后,将[7:0]rx_data 的数据按波特率时钟产生模块的顺序依次发送出去。

bsp_generate_clk_en:发送波特率时钟产生模块,功能同接收模块

3,绘制框图和时序图

4,编写发送tx 模块,并编写行为测试模块代码测试其功能


`timescale 1ns/1ps

module testbench_top();
    

//参数定义

`define CLK_PERIORD        20        //时钟周期设置为20ns(50MHz)    


//接口申明
reg i_clk;
reg i_rest_n;
 
wire o_uart_tx;
wire o_uart_tx_done;


   

 vlg_design vlg_design_inst(
    .i_clk(i_clk),
    .i_rest_n(i_rest_n),
    .o_uart_tx(o_uart_tx),
    .o_uart_tx_done(o_uart_tx_done)
  
 );
 
initial begin
 
i_clk <= 0;
i_rest_n <= 0;
#20;
i_rest_n <= 1;


#2_000_000_000;
$stop;
 
end

always #(`CLK_PERIORD/2) i_clk = ~i_clk;
 
endmodule
//my_uart_tx
//put o_rx_data to i_uart_tx
  
`timescale 1ns/1ps
module vlg_1ms(
    input i_clk,  //25Mhz
    input i_rest_n,
    output [7:0]o_data, 
    output reg tx_en
    );

localparam CNT_1MS_MAX = 25*2000 - 1;

wire clk_25m;
wire clk_12r5m;
wire clk_100m;
wire locked;
 
clk_wiz_0 instance_name
(
    // Clock out ports
    .clk_out1(clk_25m),     // output clk_out1
    .clk_out2(clk_12r5m),     // output clk_out2
    .clk_out3(clk_100m),     // output clk_out3
    // Status and control signals
    .reset(!i_rest_n), // input reset
    .locked(locked),       // output locked
    // Clock in ports
    .clk_in1(i_clk) // input clk_in1
);      

// 每隔1ms 产生一个 tx_en 上升沿脉冲  
reg [15:0] r_cnt_1ms;    
always @(posedge i_clk) begin
    if(!i_rest_n) r_cnt_1ms <= 0;
    else if(r_cnt_1ms < CNT_1MS_MAX)  r_cnt_1ms <= r_cnt_1ms + 1;
    else r_cnt_1ms <= 0;
end    
    
always @(posedge i_clk) begin
    if(!i_rest_n) tx_en <= 0;
    else if(r_cnt_1ms == CNT_1MS_MAX)  tx_en <= 1;
    else tx_en <= 0;
end    
reg [7:0]r_data;
// 每隔1ms ,data = 0000_0001 自增 
always @(posedge i_clk) begin
    if(!i_rest_n)  r_data <= 0;
    else if(r_data == 100) r_data <= 0;
    else if(r_cnt_1ms == CNT_1MS_MAX) r_data <= r_data+1;
    else ;
    end

assign o_data = r_data;




endmodule

//my_uart_tx
//put o_rx_data to i_uart_tx
  
`timescale 1ns/1ps
module vlg_design(
    input i_clk,  //25Mhz
    input i_rest_n,
    output  o_uart_tx,    
    output  o_uart_tx_done 
    );


wire clk_25m;
wire clk_12r5m;
wire clk_100m;
wire locked;
 
wire tx_bps_start;
wire o_bps_clk_en;

wire [7:0]w_data;
wire w_tx_en;

  clk_wiz_0 instance_name
   (
    // Clock out ports
    .clk_out1(clk_25m),     // output clk_out1
    .clk_out2(clk_12r5m),     // output clk_out2
    .clk_out3(clk_100m),     // output clk_out3
    // Status and control signals
    .reset(!i_rest_n), // input reset
    .locked(locked),       // output locked
   // Clock in ports
    .clk_in1(i_clk));      // input clk_in1


    
//对被测试的设计进行例化
    
vlg_speed_generate        vlg_speed_generate_inst(
    .i_clk(clk_25m),
    .i_rest_n(i_rest_n),
    .i_bps_start(tx_bps_start),
    .o_bps_clk_en(o_bps_clk_en) 
    );    
    
    
///

 vlg_my_uart_tx vlg_my_uart_tx_inst(
    .i_clk(clk_25m),
    .i_rest_n(i_rest_n),
    .i_uart_tx_bps_en(o_bps_clk_en),
    .i_rx_data(w_data),
    .tx_en(w_tx_en),
    .tx_bps_start(tx_bps_start),
    .o_uart_tx(o_uart_tx),
    .o_uart_tx_done(o_uart_tx_done)
  
 );
 ///

 vlg_1ms vlg_1ms_inst(
    .i_clk(clk_25m),
    .i_rest_n(i_rest_n),
    .o_data(w_data),
    .tx_en(w_tx_en)
 );
 endmodule

//my_uart_tx
//put o_rx_data to i_uart_tx
  
`timescale 1ns/1ps
module vlg_my_uart_tx(
    input i_clk,  //25Mhz
    input i_rest_n,
    input i_uart_tx_bps_en, 
    input [7:0]i_rx_data, 
    input tx_en,
    output reg tx_bps_start,
    output reg o_uart_tx,    
    output reg o_uart_tx_done
    );
    
reg [3:0]txdata_cnt;    
    

//检测tx_en 的高电平脉冲
//检测到高脉冲 tx_bps_start 置1
//当数据发送完成,即start,D0~D7,Stop .txdata_cnt = 10 时结束tx_bps_start 置0


reg [1:0]r_tx_en_plus;
wire w_tx_en_pos;


always @(posedge i_clk) begin
    if(!i_rest_n) r_tx_en_plus <= 2'b00;
    else r_tx_en_plus <= {r_tx_en_plus[0],tx_en};
end

assign w_tx_en_pos = r_tx_en_plus[0]& ~r_tx_en_plus[1];


//产生 tx_bps_start
always @(posedge i_clk) begin
if(!i_rest_n) tx_bps_start <= 0;
else if(txdata_cnt == 11) tx_bps_start <= 0;
else if(w_tx_en_pos) tx_bps_start <= 1;
end


//txdata_cnt 计数 0~10 
always @(posedge i_clk) begin
if(!i_rest_n) txdata_cnt <= 0;
else if(txdata_cnt == 11)  txdata_cnt <= 0;
else if(i_uart_tx_bps_en) txdata_cnt <= txdata_cnt + 1;
end

//发出o_uart_tx
wire [9:0]w_data_10 = {1'b1,i_rx_data,1'b0}; // 1,d7,d6,d5,d4,d3,d2,d1,d0,0
always @(posedge i_clk) begin
    if(!i_rest_n) o_uart_tx <= 1;
    else if(i_uart_tx_bps_en)  begin 
            case (txdata_cnt)
                0: o_uart_tx <= w_data_10[0];
                1: o_uart_tx <= w_data_10[1];
                2: o_uart_tx <= w_data_10[2];
                3: o_uart_tx <= w_data_10[3];
                4: o_uart_tx <= w_data_10[4];
                5: o_uart_tx <= w_data_10[5];
                6: o_uart_tx <= w_data_10[6];
                7: o_uart_tx <= w_data_10[7];
                8: o_uart_tx <= w_data_10[8];
                9: o_uart_tx <= w_data_10[9];
                10: o_uart_tx <= 1;
                default : o_uart_tx <= 1;
            endcase 
        end
end

//o_uart_tx_done
always @(posedge i_clk) begin
if(!i_rest_n) o_uart_tx_done <= 0;
else if(txdata_cnt == 11)  o_uart_tx_done <= 1;
else  o_uart_tx_done <= 0;
end



endmodule

 
`timescale 1ns/1ps
module vlg_speed_generate(
    input i_clk,  //input 25Mhz
    input i_rest_n,
    input i_bps_start,
    output reg o_bps_clk_en
    );

localparam bpsrate = 115200;
localparam BPS_COUNT_MAX = 1*25*1000_000/bpsrate - 1;
localparam BPS_COUNT_MAX_DIV_2 = 1*25*1000_000/bpsrate/2-1;


reg [11:0]bsp_cnt;
 
always @(posedge i_clk) begin
if(!i_rest_n) bsp_cnt <= 0;
else if(!i_bps_start) bsp_cnt <= 0;
else if(bsp_cnt < BPS_COUNT_MAX)  bsp_cnt <= bsp_cnt+1;
    else bsp_cnt <= 0;
end
 
 
always @(posedge i_clk) begin
    if(!i_rest_n) o_bps_clk_en <= 0;
    else if (bsp_cnt == BPS_COUNT_MAX_DIV_2)  o_bps_clk_en <= 1;
    else o_bps_clk_en <= 0;
end

endmodule

仿真波形

5,编写RX接收模块,并编写行为测试模块代码测试其功能


`timescale 1ns/1ps

module testbench_top();
    

//参数定义

`define CLK_PERIORD        20        //时钟周期设置为20ns(50MHz)    


//接口申明
reg [7:0]data;
reg i_clk;
reg i_rest_n;
reg i_rx;

 
wire o_uart_tx;
wire o_uart_tx_done;

wire i_uart_rx_bps_en;
wire [7:0]o_rx_data;
wire o_rx_start;
wire o_uart_rx_done;

wire locked;

  clk_wiz_0 instance_name
   (
    // Clock out ports
    .clk_out1(clk_25m),     // output clk_out1
    .clk_out2(clk_12r5m),     // output clk_out2
    .clk_out3(clk_100m),     // output clk_out3
    // Status and control signals
    .reset(!i_rest_n), // input reset
    .locked(locked),       // output locked
   // Clock in ports
    .clk_in1(i_clk));      // input clk_in1
    
 
 
vlg_my_uart_rx vlg_my_uart_rx_inst(

    .i_clk(clk_25m),
    .i_rest_n(i_rest_n),
    .i_rx(i_rx),
    .i_uart_rx_bps_en(i_uart_rx_bps_en),
    .o_rx_data(o_rx_data),
    .o_rx_start(o_rx_start),
    .o_uart_rx_done(o_uart_rx_done)

); 
 


 
 vlg_speed_generate        vlg_speed_generate_inst(
    .i_clk(clk_25m),
    .i_rest_n(i_rest_n),
    .i_bps_start(o_rx_start),
    .o_bps_clk_en(i_uart_rx_bps_en) 
    );    
    
integer i;


 
initial begin
 
i_rx <= 1;
i_clk <= 0;
i_rest_n <= 0;
#20;
i_rest_n <= 1;
data <= 8'b0101_0101;  

end

always #(`CLK_PERIORD/2) i_clk = ~i_clk;


initial begin

 
@(posedge i_clk);
@(posedge i_rest_n);
#2000_000;
i_rx <= 0;
#10_4166;  //等待1个时钟 1_000_000_000 / 9600

for(i = 0;i<8;i=i+1) begin 
    i_rx <= data[i];
    #10_4166;
end
i_rx <= 1;
#10_4166;
#2000_000;


data <= 8'b0000_0101;  
i_rx <= 0;
#10_4166;  //等待1个时钟 1_000_000_000 / 9600

for(i = 0;i<8;i=i+1) begin 
    i_rx <= data[i];
    #10_4166;
end
i_rx <= 1;
#10_4166;
#2000_000;


data <= 8'b1111_0000;  
i_rx <= 0;
#10_4166;  //等待1个时钟 1_000_000_000 / 9600

for(i = 0;i<8;i=i+1) begin 
    i_rx <= data[i];
    #10_4166;
end
i_rx <= 1;
#10_4166;
#2000_000;


data <= 8'b0000_1111;  
i_rx <= 0;
#10_4166;  //等待1个时钟 1_000_000_000 / 9600

for(i = 0;i<8;i=i+1) begin 
    i_rx <= data[i];
    #10_4166;
end
i_rx <= 1;
#10_4166;
#2000_000;

$stop;

end


endmodule
//my_uart_tx
//put rx_data to i_uart_tx

`timescale 1ns/1ps
module vlg_design(
    input i_clk,  //25Mhz
    input i_rest_n,
    input i_rx,
    output o_tx
);

wire o_uart_tx;
wire o_uart_tx_done;
wire i_uart_rx_bps_en;
(*mark_debug = "true"*)wire [7:0]o_rx_data;
wire o_rx_start;
(*mark_debug = "true"*)wire o_uart_rx_done;
wire locked;


wire clk_25m;
wire clk_12r5m;
wire clk_100m;
wire locked;
 
wire tx_bps_start;
wire i_uart_tx_bps_en;


//灏唕x_data 杞垚 tx 
 ///

 vlg_my_uart_tx vlg_my_uart_tx_inst(
    .i_clk(clk_25m),
    .i_rest_n(i_rest_n),
    .i_uart_tx_bps_en(i_uart_tx_bps_en),
    .i_rx_data(o_rx_data),
    .tx_en(o_uart_rx_done),
    .tx_bps_start(tx_bps_start),
    .o_uart_tx(o_tx),
    .o_uart_tx_done(o_uart_tx_done)
  
 );

    
vlg_speed_generate        vlg_speed_generate_tx_inst(
    .i_clk(clk_25m),
    .i_rest_n(i_rest_n),
    .i_bps_start(tx_bps_start),
    .o_bps_clk_en(i_uart_tx_bps_en) 
    );    
    

//浜х敓rx 杞琩ata鏁版嵁
vlg_my_uart_rx vlg_my_uart_rx_inst(
    .i_clk(clk_25m),
    .i_rest_n(i_rest_n),
    .i_rx(i_rx),
    .i_uart_rx_bps_en(i_uart_rx_bps_en),
    .o_rx_data(o_rx_data),
    .o_rx_start(o_rx_start),
    .o_uart_rx_done(o_uart_rx_done)
); 
  
 vlg_speed_generate        vlg_speed_generate_rx_inst(
    .i_clk(clk_25m),
    .i_rest_n(i_rest_n),
    .i_bps_start(o_rx_start),
    .o_bps_clk_en(i_uart_rx_bps_en) 
    );    


// 浜х敓鏃堕挓淇″彿
  clk_wiz_0 instance_name
   (
    // Clock out ports
    .clk_out1(clk_25m),     // output clk_out1
    .clk_out2(clk_12r5m),     // output clk_out2
    .clk_out3(clk_100m),     // output clk_out3
    // Status and control signals
    .reset(!i_rest_n), // input reset
    .locked(locked),       // output locked
   // Clock in ports
    .clk_in1(i_clk));      // input clk_in1


endmodule

//my_uart_tx
//put o_rx_data to i_uart_tx
  
`timescale 1ns/1ps
module vlg_my_uart_rx(
    input i_clk,  //25Mhz
    input i_rest_n,
    input(*mark_debug = "true"*) i_rx,  //杈撳叆 
    input i_uart_rx_bps_en, 
    
    output  [7:0]o_rx_data, 
    output reg o_rx_start,
    output reg o_uart_rx_done
    );
    
reg [3:0]rxdata_cnt;    
wire w_rx_pos;
reg  r_rx_start_pos;
reg [1:0]rx_plus;

always @(posedge i_clk) begin
    if(!i_rest_n)  rx_plus <= 2'b00;
    else rx_plus <= {rx_plus[0],i_rx};
end    

assign w_rx_pos = ~rx_plus[0] & rx_plus[1];// 鎵?鏈塺x 涓嬮檷娌?

///
//浜х敓 r_rx_start_pos 鑴夊啿锛屽綋rx 绗竴娆? = 0鏃讹紝杈撳嚭楂樼數骞筹紝鍏朵粬鏃跺埢鎷変綆
always @(posedge i_clk) begin
    if(!i_rest_n) r_rx_start_pos <= 0;
    else if(rxdata_cnt == 0) r_rx_start_pos <= w_rx_pos;
    else r_rx_start_pos <= 0;

end    



//妫?娴嬪埌 rx 1涓剦鍐茬殑涓嬮檷娌匡紝琛ㄧず淇″彿寮?濮嬶紝鎶?鏈粨鏉燂紝瀹屾垚
//o_rx_start
always @(posedge i_clk) begin
    if(!i_rest_n) o_rx_start <= 0;
    else if(rxdata_cnt == 11)o_rx_start <= 0;
    else if(r_rx_start_pos) o_rx_start <= 1;
    else  ;
end

//浜х敓rxdata_cnt璁℃暟
always @(posedge i_clk) begin
    if(!i_rest_n) rxdata_cnt <= 0;
    else if (rxdata_cnt == 11) rxdata_cnt <= 0;
    else if(i_uart_rx_bps_en)rxdata_cnt <= rxdata_cnt + 1;
    else ;
end

reg [7:0]r_rx_data;    
//鏀堕泦鏁版嵁
always @(posedge i_clk) begin
    if(!i_rest_n) r_rx_data <= 8'b0000_0000;  
   
     else if(i_uart_rx_bps_en)   
        case (rxdata_cnt)
            4'd0:    ;//start
            4'd1:    r_rx_data[0] <= i_rx;
            4'd2:    r_rx_data[1] <= i_rx;
            4'd3:    r_rx_data[2] <= i_rx;
            4'd4:    r_rx_data[3] <= i_rx;
            4'd5:    r_rx_data[4] <= i_rx;
            4'd6:    r_rx_data[5] <= i_rx;
            4'd7:    r_rx_data[6] <= i_rx;
            4'd8:    r_rx_data[7] <= i_rx;
            4'd9:;//stop
            4'd10:;//none
            default:;//none
        endcase 
 end    

assign o_rx_data= (rxdata_cnt == 11)?r_rx_data:o_rx_data;

//浜х敓o_uart_rx_done
always @(posedge i_clk) begin
    if(!i_rest_n)  o_uart_rx_done <= 0;
    else if(rxdata_cnt == 11) o_uart_rx_done <= 1;
    else o_uart_rx_done <= 0;  
end
endmodule

6,配置IO端口,生成bit文件烧录到板子测试

7,问题1:2024年1月10日

发送单个数据没有问题,但是连发出现异常数据。

对比代码发现例程代码的发送数据,结束位并没有保持1个bsp的完整高电平,而是只保持了一个脉冲的电平

修改代码后,测试ok

//my_uart_tx
//put o_rx_data to i_uart_tx
  
`timescale 1ns/1ps
module vlg_my_uart_tx(
    input i_clk,  //25Mhz
    input i_rest_n,
    input i_uart_tx_bps_en, 
    input [7:0]i_rx_data, 
    input tx_en,
    output reg tx_bps_start,
    output reg o_uart_tx,    
    output reg o_uart_tx_done
    );
    
reg [3:0]txdata_cnt;    
    

//检测tx_en 的高电平脉冲
//检测到高脉冲 tx_bps_start 置1
//当数据发送完成,即start,D0~D7,Stop .txdata_cnt = 10 时结束tx_bps_start 置0


reg [1:0]r_tx_en_plus;
wire w_tx_en_pos;


always @(posedge i_clk) begin
    if(!i_rest_n) r_tx_en_plus <= 2'b00;
    else r_tx_en_plus <= {r_tx_en_plus[0],tx_en};
end

assign w_tx_en_pos = r_tx_en_plus[0]& ~r_tx_en_plus[1];


//产生 tx_bps_start
always @(posedge i_clk) begin
if(!i_rest_n) tx_bps_start <= 0;
else if(txdata_cnt == 10) tx_bps_start <= 0;
else if(w_tx_en_pos) tx_bps_start <= 1;
end


//txdata_cnt 计数 0~10 
always @(posedge i_clk) begin
if(!i_rest_n) txdata_cnt <= 0;
else if(txdata_cnt == 10)  txdata_cnt <= 0;
else if(i_uart_tx_bps_en) txdata_cnt <= txdata_cnt + 1;
end

//发出o_uart_tx
wire [9:0]w_data_10 = {1'b1,i_rx_data,1'b0}; // 1,d7,d6,d5,d4,d3,d2,d1,d0,0
always @(posedge i_clk) begin
    if(!i_rest_n) o_uart_tx <= 1;
    else if(i_uart_tx_bps_en)  begin 
            case (txdata_cnt)
                0: o_uart_tx <= w_data_10[0];
                1: o_uart_tx <= w_data_10[1];
                2: o_uart_tx <= w_data_10[2];
                3: o_uart_tx <= w_data_10[3];
                4: o_uart_tx <= w_data_10[4];
                5: o_uart_tx <= w_data_10[5];
                6: o_uart_tx <= w_data_10[6];
                7: o_uart_tx <= w_data_10[7];
                8: o_uart_tx <= w_data_10[8];
                9: o_uart_tx <= w_data_10[9];
                default : o_uart_tx <= 1;
            endcase 
        end
end

//o_uart_tx_done
always @(posedge i_clk) begin
    if(!i_rest_n) o_uart_tx_done <= 0;
    else if(txdata_cnt == 10)  o_uart_tx_done <= 1;
    else  o_uart_tx_done <= 0;
end
endmodule

8,问题2:{} 数据合并要加上前缀

wire [9:0]w_data_10 = {1,i_rx_data,0}; //错误

wire [9:0]w_data_10 = {1'b1,i_rx_data,1'b0}; //正确

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

圣诞老人遇见 GenAI:利用大语言模型、LangChain 和 Elasticsearch 破译手写的圣诞信件

在北极的中心地带&#xff0c;圣诞老人的精灵团队面临着巨大的后勤挑战&#xff1a;如何处理来自世界各地儿童的数百万封信件。 圣诞老人表情坚定&#xff0c;他决定是时候将人工智能纳入圣诞节行动了。 圣诞老人坐在配备了最新人工智能技术的电脑前&#xff0c;开始在 Jupyter…

【Linux】Ubuntu 解压 zip、z01、z02等压缩文件的方法,Linux如何解压分卷压缩的

zip分卷压缩&#xff0c;在windows上压缩来的&#xff0c;如何解压这种文件&#xff1a; -rw-rw-r-- 1 20401094656 Dec 10 20:06 FFHQ.z01 -rw-rw-r-- 1 20401094656 Dec 10 20:10 FFHQ.z02 -rw-rw-r-- 1 20401094656 Dec 10 23:22 FFHQ.z03 -rw-rw-r-- 1 20401094656 Dec 10…

docker微服务案例

文章目录 建立简单的springboot项目(boot3)boot2建立通过dockerfile发布微服务部署到docker容器编写Dockerfile打包成镜像运行镜像微服务 建立简单的springboot项目(boot3) 1.建立module 2. 改pom <?xml version"1.0" encoding"UTF-8"?> <…

通过反射修改MultipartFile类文件名

1、背景 项目上有这样一个需求&#xff0c;前端传文件过来&#xff0c;后端接收后按照特定格式对文件进行重命名。(修改文件名需求其实也可以在前端处理的) //接口类似于下面这个样子 PosMapping("/uploadFile") public R uploadFile(List<MultipartFile> fil…

鸿蒙HarmonyOS学习手册_入门篇

鸿蒙HarmonyOS学习手册_入门篇 文章目录 鸿蒙HarmonyOS学习手册_入门篇入门快速入门开发准备基本概念UI框架应用模型工具准备 构建第一个ArkTS应用&#xff08;Stage模型&#xff09;-快速入门-入门创建ArkTS工程ArkTS工程目录结构&#xff08;Stage模型&#xff09;构建第一个…

day14 二叉树的遍历 递归遍历 迭代遍历 统一遍历

题目1&#xff1a;递归遍历 题目链接1&#xff1a;144 二叉树的前序遍历 题意 根据二叉树的根节点root&#xff0c;返回它的前序遍历 递归法 前序遍历&#xff1a;中左右 递归三部曲 1) 确定递归函数的参数和返回值 2&#xff09;确定终止条件 3&#xff09;确定单层递…

linux搭建SRS服务器

linux搭建SRS服务器 文章目录 linux搭建SRS服务器SRS说明实验说明搭建步骤推流步骤查看web端服务器拉流步骤final SRS说明 SRS&#xff08;simple Rtmp Server&#xff09;,是一个简单高效的实时视频服务器&#xff0c;支持RTMP/WebRTC/HLS/HTTP-FLV/SRT, 是国人自己开发的一款…

计算机基础面试题 |22.精选计算机基础面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

坑记(HttpInputMessage)

一、背景知识 public interface HttpInputMessage extends HttpMessage Represents an HTTP input message, consisting of headers and a readable body.Typically implemented by an HTTP request on the server-side, or a response on the client-side.Since: 3.0 Author:…

windows安装Elasticsearch后使用ik分词器报错解决办法

最近在学习Elasticsearch&#xff0c;安装完成后下载了ik分词器压缩到plugins目录下启动es报错如下&#xff1a; java.security.AccessControlException: access denied (“java.io.FilePermission” “D:…\plugins\ik-analyzer\config\IKAnalyzer.cfg.xml” “read”)咋一看…

03 - 系统调用

---- 整理自 王利涛老师 课程 实验环境&#xff1a;宅学部落 www.zhaixue.cc 文章目录 1. 系统调用基本概念1.1 一个系统调用的例子1.2 什么是系统调用&#xff1f;软件复用的角度 2. 软中断&#xff1a;系统调用的入口2.1 权限管理2.2 系统调用号2.4 man 2 syscall2.5 实验&am…

全自动网页生成系统网站源码重构版

源码优点: 所有模板经过精心审核与修改&#xff0c;完美兼容小屏手机大屏手机&#xff0c;以及各种平板端、电脑端和360浏览器、谷歌浏览器、火狐浏览器等等各大浏览器显示。 免费制作 为用户使用方便考虑&#xff0c;全自动网页制作系统无需繁琐的注册与登入&#xff0c;直…

MongoDB 设置账号密码_mongodb设置用户名和密码

MongoDB 设置账号密码_mongodb设置用户名和密码 1、安装 安装可以看我这篇文章:https://blog.csdn.net/u014641168/article/details/123937775 2、说明 由于默认安装的MongoDB是没有设置用户密码的,极其危险,所以需要设置一下用户密码 3、创建用户 用Navicat15连接Mon…

Web组件的使用

文章目录 1 概述2 加载网页加载在线网页加载本地网页 3 网页缩放文本缩放 4 Web组件事件Web组件处理JS confirm事件 5 Web和JavaScript交互启用JavaScriptWeb组件调用JS方法JS调用Web组件方法 6 处理页面导航7 调试网络应用8 参考链接 1 概述 相信大家都遇到过这样的场景&…

Serverless 开拓无服务器时代:云计算的新趋势(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

SouthernBiotech抗荧光淬灭封片剂

荧光淬灭又称荧光熄灭或萃灭&#xff0c;是指导致特定物质的荧光强度和寿命减少的所有现象。引起荧光淬灭的物质称为荧光淬灭剂。SouthernBiotech专门开发的Fluoromount-G系列荧光封片剂是以甘油为基础&#xff0c;加入抗荧光淬灭剂&#xff0c;可明显降低荧光淬灭现象&#xf…

提升测试多样性,揭秘Pytest插件pytest-randomly

大家可能知道在Pytest测试生态中&#xff0c;插件扮演着不可或缺的角色&#xff0c;为开发者提供了丰富的功能和工具。其中&#xff0c;pytest-randomly 插件以其能够引入随机性的特性而备受欢迎。本文将深入探讨 pytest-randomly 插件的应用&#xff0c;以及如何通过引入随机性…

MySQL:索引失效场景总结

1 执行计划查索引 通过执行计划命令可以查看查询语句使用了什么索引。 EXPLAIN SELECT * FROM ods_finebi_area WHERE areaName = 福建 执行查询计划后,key列的值就是被使用的索引的名称,若key列没有值表示查询未使用索引。 2 在什么列上创建索引 (1)列经常被用于where…

Ubuntu 22.0.4 忘记重置 MySQL 密码

Ubuntu 22.0.4 忘记重置 MySQL 密码 一、问题描述二、解决办法 一、问题描述 Ubuntu 22.0.4 忘记了 MySQL的密码&#xff0c;需要重新设置密码 环境描述&#xff1a; 系统&#xff1a;Ubuntu 22.0.4 MySQL&#xff1a;8.0.35 &#xff08;通过 apt install mysql-sever 安装的…

HarmonyOS 容器组件(Column Row Flex)

今天 我们来说容器组件中的 Column Row Flex Column 我们应该比较熟了 之前用了很多了 是一个列容器 老规矩 先来一个组件骨架 Entry Component struct Index {build() {Column({space: 30}) {}.width(100%).height(100%)} }我们在中的 Column 元素中加入代码 Column() {Co…