【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/1psmodule 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 begini_clk <= 0;
i_rest_n <= 0;
#20;
i_rest_n <= 1;#2_000_000_000;
$stop;endalways #(`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,  //25Mhzinput 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) beginif(!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) beginif(!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) beginif(!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 ;endassign 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,  //25Mhzinput 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,  //25Mhzinput 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 置0reg [1:0]r_tx_en_plus;
wire w_tx_en_pos;always @(posedge i_clk) beginif(!i_rest_n) r_tx_en_plus <= 2'b00;else r_tx_en_plus <= {r_tx_en_plus[0],tx_en};
endassign 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) beginif(!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;
endendmodule
 
`timescale 1ns/1ps
module vlg_speed_generate(input i_clk,  //input 25Mhzinput 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;
endalways @(posedge i_clk) beginif(!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;
endendmodule

仿真波形

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


`timescale 1ns/1psmodule 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_in1vlg_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 begini_rx <= 1;
i_clk <= 0;
i_rest_n <= 0;
#20;
i_rest_n <= 1;
data <= 8'b0101_0101;  endalways #(`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 / 9600for(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 / 9600for(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 / 9600for(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 / 9600for(i = 0;i<8;i=i+1) begin i_rx <= data[i];#10_4166;
end
i_rx <= 1;
#10_4166;
#2000_000;$stop;endendmodule
//my_uart_tx
//put rx_data to i_uart_tx`timescale 1ns/1ps
module vlg_design(input i_clk,  //25Mhzinput 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_in1endmodule
//my_uart_tx
//put o_rx_data to i_uart_tx`timescale 1ns/1ps
module vlg_my_uart_rx(input i_clk,  //25Mhzinput 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) beginif(!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) beginif(!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) beginif(!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) beginif(!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 ;
endreg [7:0]r_rx_data;    
//鏀堕泦鏁版嵁
always @(posedge i_clk) beginif(!i_rest_n) r_rx_data <= 8'b0000_0000;  else if(i_uart_rx_bps_en)   case (rxdata_cnt)4'd0:    ;//start4'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:;//stop4'd10:;//nonedefault:;//noneendcase end    assign o_rx_data= (rxdata_cnt == 11)?r_rx_data:o_rx_data;//浜х敓o_uart_rx_done
always @(posedge i_clk) beginif(!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,  //25Mhzinput 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 置0reg [1:0]r_tx_en_plus;
wire w_tx_en_pos;always @(posedge i_clk) beginif(!i_rest_n) r_tx_en_plus <= 2'b00;else r_tx_en_plus <= {r_tx_en_plus[0],tx_en};
endassign 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) beginif(!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) beginif(!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}; //正确

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

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

相关文章

设计模式之外观模式【结构型模式】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档> 学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某…

小游戏实战丨基于Tkinter的五子棋小游戏

文章目录 写在前面Tkinter五子棋系列文章写在后面 写在前面 本期内容&#xff1a;基于tkinter的五子棋小游戏 下载地址&#xff1a;https://download.csdn.net/download/m0_68111267/88700190 实验环境 python3.11及以上pycharmtkinter Tkinter Tkinter是Python的一个标准…

C#,归并排序算法(Merge Sort Algorithm)的源代码及数据可视化

归并排序 归并算法采用非常经典的分治策略&#xff0c;每次把序列分成n/2的长度&#xff0c;将问题分解成小问题&#xff0c;由复杂变简单。 因为使用了递归算法&#xff0c;不能用于大数据的排序。 核心代码&#xff1a; using System; using System.Text; using System.Co…

phpstudy面板Table ‘mysql.proc‘ doesn‘t exist解决办法

原因分析&#xff1a;误删了mysql数据库 解决办法如下&#xff1a; 1、停止服务 2、先把mysql文件夹下的data文件夹备份&#xff0c;因为data文件里存有数据库文件。然后再删除data文件。 3、cmd管理员命令进入到mysql中的bin目录下 &#xff0c;执行mysqld --initialize-…

视频监控系统EasyCVR如何通过调用API接口查询和下载设备录像?

智慧安防平台EasyCVR是基于各种IP流媒体协议传输的视频汇聚和融合管理平台。视频流媒体服务器EasyCVR采用了开放式的网络结构&#xff0c;支持高清视频的接入和传输、分发&#xff0c;平台提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联…

Linux Debian12系统gnome桌面环境默认提供截屏截图工具gnome-screenshot

一、简介&#xff1a; 在Debian12中系统gnome桌面环境默认提供一个截图捕获工具screenshot,可以自定义区域截图、屏幕截图、窗口截图和录制视频&#xff0c;截图默认保存在“~/图片/截图”路径下。 可以在应用程序中搜索screenshot,如下图&#xff1a; 也可以在桌面右上角找到…

【揭秘APT攻击】——内网渗透实战攻略,带你领略网络安全的绝密世界!

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 介绍 什么是内网&#xff1f; 什么是内网渗透&#xff1f; 内网渗透的目的&#xff1a; 内网…

数据挖掘在制造业中的预测与优化应用

随着大数据时代的到来&#xff0c;数据挖掘技术在各行各业的应用日益广泛&#xff0c;尤其在制造业中&#xff0c;其对于提升生产效率、降低运营成本、优化供应链管理等方面发挥着不可替代的作用。本文将探讨数据挖掘在制造业中的预测与优化应用&#xff0c;通过深入剖析实际案…

RockMQ面试题(1)

为什么要使用MQ 应用解耦&#xff1a;系统的耦合性越高&#xff0c;容错性就越低。以电商应用为例&#xff0c;用户创建订单后&#xff0c;如果耦合调用库存系统、物流 系统、支付系统&#xff0c;任何一个子系统出了故障或者因为升级等原因暂时不可用&#xff0c;都会造成下单…

【hcie-cloud】【17】华为云Stack灾备服务介绍【灾备方案概述、备份解决方案介绍】【上】

文章目录 前言灾备方案概述灾备的定义灾备的重要性故障和灾难对业务连续性带来的挑战灾备系统的衡量指标RTO与RPO分析 灾备等级标准数据中心容灾解决方案全景图云灾备服务总结架构华为云Stack灾备服务总览 备份解决方案介绍云备份服务介绍备份服务架构介绍云备份服务组件功能介…

万能字符单词拼写 - 华为OD统一考试

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 有一个字符串数组 words 和一个字符串 chars。假如可以用 chars 中的字母拼写出 words 中的某个"单词"(字符串),那么我们就认为你掌握了这个单词。 words 的字符仅由 a-z 英文小写宁母组成,…

Postman工具使用一篇快速入门教程

文章目录 下载安装注册登录CollectionFolderRequestGet请求Post请求Header设置Response响应 EnvironmentsGlobal环境变量其他环境变量Collection变量变量使用同名变量的优先级 Postman内置变量Pre-request script和Test script脚本设置、删除和获取变量获取请求参数获取响应数据…

气膜建筑在室内运动场馆的创新应用

气膜建筑作为一种轻质、灵活、节能的建筑结构形式&#xff0c;近年来在室内运动场馆领域得到了广泛的创新应用。其独特的设计理念和优势性能为室内运动场馆提供了更多可能性&#xff0c;不仅改善了体育场馆的建筑结构&#xff0c;还为运动员和观众提供了更加舒适、独特的体验。…

day-05 删除子串后的字符串最小长度

思路 通过不断地检查是否含有"AB"或"CD"&#xff0c;如果有则将其从字符串中删除&#xff0c;直到"AB"或"CD"都不存在时&#xff0c;返回字符串的长度 解题方法 //检测是否有"AB" for(int i0;i<len-1;i){ if(s.charAt(i…

关于Geek软件的下载

直接百度搜geek出来的前几条似乎都是广告&#xff1a; 点进去之后是这个界面&#xff1a; 然后安装到最后一步提示要付费才能安装成功&#xff1a; 然后如果是用谷歌搜索&#xff1a; 有free版和pro版&#xff1a; free版下载之后压缩包解压就是exe不需要安装 综上&#xff0c…

功能消费迈向精智生活,绿联如何撬动3C数码新增量?

根据行业生命周期理论&#xff0c;当前国产移动数码周边市场俨然已迈入成熟期&#xff0c;相关企业也完成一轮腾飞&#xff0c;正在为新的发展蓄能。 其中&#xff0c;绿联的发展历程可以说是行业进化升级的缩影。产品层面&#xff0c;已完成从“数据线厂商”到专业数码科技公…

小米机型解锁bl 绕过社区等级5才可以解锁的限制的教程

小米机型目前限制了解锁bl的机制。从以前单一的绑定解锁到目前绑定账号必须小米社区5级的条件限制。切必须要答题分数够才可以申请解锁。限制的根本原因也在为消费者提供更好的服务。避免刷机小白无基础常识解锁bl后第三方固件或者软件造成的故障。另外一方面也在于市场格机脚本…

蓝桥杯 python 第二题 数列排序

这里给出一种解法 """ # 错的 n int(input()) dp[int(i) for i in input().split(" ")] dp.sort() print(" ".join(str(i) for i in dp)) """#这个是对的 num int(input())l list(map(int, input().split()))l.sort()pr…

【Unity】如何在Unity中使用C#的NuGet 包资源

【背景】 Unity的脚本语言是C#&#xff0c;而C#有很多功能和能力可以通过nuget包提供。有没有办法把这些能力结合到Unity中一起使用呢&#xff1f;如果可以&#xff0c;那将大大扩展Unity中各类功能实现的便捷性。 【方法】 答案是&#xff1a;你可以&#xff01; 获取Nuge…

跟我学java|Stream流式编程——并行流

什么是并行流 并行流是 Java 8 Stream API 中的一个特性。它可以将一个流的操作在多个线程上并行执行&#xff0c;以提高处理大量数据时的性能。 在传统的顺序流中&#xff0c;所有的操作都是在单个线程上按照顺序执行的。而并行流则会将流的元素分成多个小块&#xff0c;并在多…