按键+串口发送实验

news2024/11/25 13:09:53

摸鱼记录 Day_15     ~( ̄▽ ̄~)(~ ̄▽ ̄)~

review

        前边已经学习了:

        串口发送Vivado 串口通信(UART)------串口发送-CSDN博客

        按键基于状态机的按键消抖实现-CSDN博客

1.  今日摸鱼任务

控制四个按键[3:0]key

按下按键后:

                    使用串口发送对应的拨码开关的值到电脑

                    发送完成后对应的led闪烁

 2. design sources

key_one   基于状态机的按键消抖实现-CSDN博客

module key_one(
                 input clk , 
                 input reset_n,
                 input key,
                 output reg key_flag,
                 output reg key_state);
                 
        // nedge_key pedge_key
        reg dff_k_0 , dff_k_1 ;
        reg r_key; 
        wire  nedge_key, pedge_key;
        always@(posedge clk )    
            dff_k_0 <= key ;
        always@(posedge clk )    
            dff_k_1 <= dff_k_0 ;
        always@(posedge clk )    
            r_key <= dff_k_1 ;
            
        assign nedge_key = (r_key == 1)&&(dff_k_1 == 0);
        assign pedge_key = (r_key == 0)&&(dff_k_1 == 1);
   
        // key_now   0:IDLE   1:FILTER0   2:DOWN   3:FILTER1
        // cnt 20ms/20ns = 1000000 ;
        reg [1:0]key_now;
        reg [19:0] cnt;
        parameter cnt_N = 1000000;
        always@(posedge clk or negedge reset_n ) 
            if(!reset_n) 
                begin
                    key_now <= 0 ;
                    cnt <= 0;
                    key_flag <= 0;
                    key_state <= 1;
                end
            else 
                begin
                    key_flag <= 0;
                    case(key_now)
                        0:
                           if(!nedge_key) key_now <= 0;
                           else 
                               begin 
                                 cnt <= 0 ;
                                 key_now <= 1; 
                               end
                               
                        1:
                            if(pedge_key) key_now <= 0;
                            else if(cnt >= cnt_N - 1) 
                                begin
                                    cnt <= 0 ;
                                    key_now <= 2;
                                    key_flag <= 1;
                                    key_state <= 0;
                                end
                            else cnt <= cnt + 1'b1;
                            
                        2:
                            if(!pedge_key) key_now <= 2;
                            else
                                begin
                                    cnt <= 0 ;
                                    key_now <= 3;
                                end
                        
                        3:
                            if(nedge_key) key_now <= 2;
                            else if(cnt >= cnt_N - 1)
                                 begin
                                    cnt <= 0 ;
                                    key_now <= 0;
                                    key_flag <= 1;
                                    key_state <= 1;
                                end
                            else cnt <= cnt + 1'b1;    
                        
                    endcase
                end

endmodule

uart_txx   Vivado 串口通信(UART)原理A ------串口发送实验-CSDN博客

module uart_txx(input clk , 
                input reset_n , 
                input [7:0]data , 
                input Send_Go ,
                output  reg uart_tx_ , 
                output reg Tx_Done  );
        //默认使用波特率BAUD 115200  时钟频率 CLK_FREQ  50MHz
    parameter start_bit = 0 ;
    parameter stop_bit  = 1 ;
    parameter BAUD = 115200;
    parameter CLK_FREQ = 50_000_000;
    parameter bps_c = CLK_FREQ / BAUD ;    
    
        reg Send_en ; 
        always@(posedge clk or negedge reset_n )
        if(! reset_n) 
            Send_en <= 0 ;
        else if(Send_Go)
            Send_en <= 1 ; 
        else if((tx_flag==9)&&(counter_bps == bps_c - 1)) 
            Send_en <= 0 ;
        
      // bps
      reg [30:0] counter_bps ;        
      always@(posedge clk or negedge reset_n)
        if(! reset_n) 
            counter_bps <= 0 ;
        else if (Send_en)
            if(counter_bps == bps_c - 1)
                counter_bps <= 0 ;
            else
                counter_bps <= counter_bps + 1'b1 ;
        else
            counter_bps <= 0 ;
            
      // 发送状态
      reg [3:0] tx_flag;
      always@(posedge clk or negedge reset_n)
        if(! reset_n) 
            tx_flag <= 0 ;
        else if (!Send_en) tx_flag <= 0 ;
        else if ((tx_flag==9)&&(counter_bps == bps_c - 1))
             tx_flag <= 0 ;
        else
             if(counter_bps == bps_c - 1)
                tx_flag <= tx_flag + 1'b1 ;
                
//       Send_Go改变发送信号         
        reg [7:0]r_data;
        always@(posedge clk)
        if(Send_Go)
         r_data <= data;
        else
         r_data <= r_data;                    
         
    //  tx_flag          
       always@(*)
       if(!Send_en) 
            uart_tx_ <= 1'b1;
       else
        begin 
            case(tx_flag)
            4'b0000 : uart_tx_ <= start_bit;
            4'b0001 : uart_tx_ <= r_data[0];
            4'b0010 : uart_tx_ <= r_data[1];
            4'b0011 : uart_tx_ <= r_data[2];
            4'b0100 : uart_tx_ <= r_data[3];
            4'b0101 : uart_tx_ <= r_data[4];
            4'b0110 : uart_tx_ <= r_data[5];
            4'b0111 : uart_tx_ <= r_data[6];
            4'b1000 : uart_tx_ <= r_data[7];
            4'b1001 : uart_tx_ <= stop_bit;
            default : uart_tx_ <= uart_tx_;
            endcase
            
        end      
        
        
        always@(posedge clk )        
        Tx_Done <= (tx_flag==9)&&(counter_bps == bps_c - 1);
     
endmodule

//以上两个函数对应之前的学习笔记
开始主函数哩:
key_main

module key_main( input clk , 
                 input reset_n,
                 input [3:0]key,
                 input [7:0]data,
                 output [3:0] key_state,           //按键状态判断,可用key_one 获得
                 output reg tx_data,                //串口输出
                 output [3:0] led                     // 串口发送完成信号,可用uart_txx 获得

                 );

        //四个按键

       wire [3:0] key_flag;

                key_one   

                                key_0

                                key_1

                                key_2

                                key_3

        //对应uart_tx

        wire [3:0] tx_data_;

endmodule

一开始的想法当然很简单啦~

第一个问题:uart_txx  uart_tx_0(. clk(clk) ,  . reset_n(reset_n), . data(data) , 
                . Send_Go(key_flag[0] ),. uart_tx_(tx_data_[0]) , . Tx_Done(led[0])  );

        用key_flag[0] 作为串口发送使能信号,key_flag[0] 在按键按下、释放都会产生脉冲信号,故在按键按下会发送两次信号

解决方法:if((key_flag[0])&&(key_state[0]==0))  Send_Go_[0] <=  1'b1 ;

                        添加使能信号 reg [3:0]Send_Go_ ; 

第二个问题:

[DRC MDRV-1] Multiple Driver Nets: Net uart_tx_3/tx_data_OBUF has multiple drivers: uart_tx_2/uart_tx__reg/Q, uart_tx_3/uart_tx__reg/Q, uart_tx_0/uart_tx__reg/Q, and uart_tx_1/uart_tx__reg/Q.
                有多个端口驱动一个网络,也就是程序中出现了相同变量的网络号。

uart_txx  uart_tx_0(. clk(clk) ,  . reset_n(reset_n), . data(data) , 
                . Send_Go(Send_Go_[0]) ,. uart_tx_(tx_data) ,. Tx_Done(led[0])  );     
    uart_txx  uart_tx_1(. clk(clk) ,  . reset_n(reset_n), . data(data) , 
                . Send_Go(Send_Go_[1]) ,. uart_tx_(tx_data) , . Tx_Done(led[1])  ); 
    uart_txx  uart_tx_2(. clk(clk) ,  . reset_n(reset_n), . data(data) , 
                . Send_Go(Send_Go_[2]) ,. uart_tx_(tx_data) , . Tx_Done(led[2])  ); 
    uart_txx  uart_tx_3(. clk(clk) ,  . reset_n(reset_n), . data(data) , 
                . Send_Go(Send_Go_[3]) ,. uart_tx_(tx_data) , . Tx_Done(led[3])  );   

解决方法:     wire [3:0] tx_data_;

                       并添加reg [3:0]Send_Go_flag ; 控制  tx_data此时的输出信号

module key_main( input clk , 
                 input reset_n,
                 input [3:0]key,
                 input [7:0]data,
                 output [3:0] key_state,
                 output reg tx_data,
                 output [3:0] led    );
    parameter cnt_num = 1000000;
    wire [3:0] key_flag;
    key_one   key_0(. clk(clk) ,  . reset_n(reset_n),. key(key[0]),
                    .  key_flag(key_flag[0]),.  key_state(key_state[0]));
                    defparam key_0.cnt_N = cnt_num;
    key_one   key_1(. clk(clk) ,  . reset_n(reset_n),. key(key[1]),
                    .  key_flag(key_flag[1]),.  key_state(key_state[1]));
                    defparam key_1.cnt_N = cnt_num;
    key_one   key_2(. clk(clk) ,  . reset_n(reset_n),. key(key[2]),
                    .  key_flag(key_flag[2]),.  key_state(key_state[2]));
                    defparam key_2.cnt_N = cnt_num;
    key_one   key_3(. clk(clk) ,  . reset_n(reset_n),. key(key[3]),
                    .  key_flag(key_flag[3]),.  key_state(key_state[3]));
                    defparam key_3.cnt_N = cnt_num;
    reg [3:0]Send_Go_ ; 
        always@(posedge clk or negedge reset_n )
        if(! reset_n)   Send_Go_ <=  4'b0000 ;
        else if((key_flag[0])&&(key_state[0]==0))  Send_Go_[0] <=  1'b1 ;
        else if((key_flag[1])&&(key_state[1]==0))  Send_Go_[1] <=  1'b1 ;
        else if((key_flag[2])&&(key_state[2]==0))  Send_Go_[2] <=  1'b1 ;
        else if((key_flag[3])&&(key_state[3]==0))  Send_Go_[3] <=  1'b1 ;
        else   Send_Go_ <=  4'b0000 ;                

    wire [3:0] tx_data_;
    uart_txx  uart_tx_0(. clk(clk) ,  . reset_n(reset_n), . data(data) , 
                . Send_Go(Send_Go_[0]) ,. uart_tx_(tx_data_[0]) , . Tx_Done(led[0])  );     
    uart_txx  uart_tx_1(. clk(clk) ,  . reset_n(reset_n), . data(data) , 
                . Send_Go(Send_Go_[1]) ,. uart_tx_(tx_data_[1]) , . Tx_Done(led[1])  ); 
    uart_txx  uart_tx_2(. clk(clk) ,  . reset_n(reset_n), . data(data) , 
                . Send_Go(Send_Go_[2]) ,. uart_tx_(tx_data_[2]) , . Tx_Done(led[2])  ); 
    uart_txx  uart_tx_3(. clk(clk) ,  . reset_n(reset_n), . data(data) , 
                . Send_Go(Send_Go_[3]) ,. uart_tx_(tx_data_[3]) , . Tx_Done(led[3])  );    
                
   reg [3:0]Send_Go_flag ; 
        always@(posedge clk or negedge reset_n )
        if(! reset_n)   Send_Go_flag <=  4'b0000 ;
        else if(Send_Go_[0]) Send_Go_flag[0] <=  1'b1 ;
        else if(led[0]) Send_Go_flag[0] <=  1'b0 ;  
        else if(Send_Go_[1])  Send_Go_flag[1] <=  1'b1 ;
        else if(led[1])  Send_Go_flag[1] <=  1'b0 ;
        else if(Send_Go_[2]) Send_Go_flag[2] <=  1'b1 ;
        else if(led[2]) Send_Go_flag[2] <=  1'b0 ;  
        else if(Send_Go_[3])  Send_Go_flag[3] <=  1'b1 ;
        else if(led[3])  Send_Go_flag[3] <=  1'b0 ;          
        
        
        always@(posedge clk or negedge reset_n )
        if(! reset_n)   tx_data <=  1'b1 ;  
        else if(Send_Go_flag[0]) tx_data <= tx_data_[0]; 
        else if(Send_Go_flag[1]) tx_data <= tx_data_[1]; 
        else if(Send_Go_flag[2]) tx_data <= tx_data_[2]; 
        else if(Send_Go_flag[3]) tx_data <= tx_data_[3]; 
        else  tx_data <=  1'b1 ;                                       
endmodule

3.   key_tb

`timescale 1ns / 1ns
module key_tb(   );
    reg clk ,  reset_n ;
    reg [3:0]key;
    reg [7:0]data;
    wire [3:0]key_state;
    wire tx_data;
    wire [3:0]led;
    parameter cut_time = 1000;
    key_main   key_4( . clk(clk) ,  . reset_n(reset_n),. key(key),.data(data),
                    .  key_state(key_state),
                    . tx_data(tx_data), .led(led) );
                defparam key_4.cnt_num = cut_time;
    initial clk = 1;
    always#10 clk = ~clk ;
    initial
        begin
          reset_n = 0 ;
          key = 4'b1111;
          #201;
          reset_n = 1 ;  
          key_press(2);
          $stop;  
        end
    
 reg [13:0] rand;
 task key_press;
    input[3:0]seed;
    begin
        key =  4'b1111 ;
        data = 8'b1111_0000;
        #100000;
// key[0]
        repeat(10)
            begin
                rand = {$random(seed)} % 10000;
                #rand;
                key[0]=~key[0];
            end
        key = 4'b1110 ;
        #100000;
        repeat(10)
            begin
                rand = {$random(seed)} % 10000;
                #rand;
                key[0]=~key[0];
            end
         key = 4'b1111 ;
         data = 8'b1100_1100;
        #100000;
 // key[1]
        repeat(10)
            begin
                rand = {$random(seed)} % 10000;
                #rand;
                key[1]=~key[1];
            end
        key = 4'b1101 ;
        #100000;
        repeat(10)
            begin
                rand = {$random(seed)} % 10000;
                #rand;
                key[1]=~key[1];
            end
         key = 4'b1111 ;
         data = 8'b0101_1010;
        #100000; 
// key[2]
        repeat(10)
            begin
                rand = {$random(seed)} % 10000;
                #rand;
                key[2]=~key[2];
            end
        key = 4'b1011;
        #100000;
        repeat(10)
            begin
                rand = {$random(seed)} % 10000;
                #rand;
                key[2]=~key[2];
            end
         key = 4'b1111 ;
         data = 8'b1100_1100;
        #100000;
// key[3]        
        repeat(10)
            begin
                rand = {$random(seed)} % 10000;
                #rand;
                key[3]=~key[3];
            end
        key = 4'b0111 ;
        #100000;
        repeat(10)
            begin
                rand = {$random(seed)} % 10000;
                #rand;
                key[3]=~key[3];
            end
         key = 4'b1111 ;
         data = 8'b1100_1100;
        #100000;
    end
   
endtask
 
endmodule

4. constraint

set_property IOSTANDARD LVCMOS33 [get_ports {data[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {data[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {data[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {data[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {data[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {data[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {data[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {data[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {key[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {key[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {key[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {key[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {key_state[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {key_state[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {key_state[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {key_state[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports reset_n]
set_property IOSTANDARD LVCMOS33 [get_ports tx_data]
set_property PACKAGE_PIN U18 [get_ports clk]
set_property PACKAGE_PIN H18 [get_ports reset_n]
set_property PACKAGE_PIN J16 [get_ports tx_data]
set_property PACKAGE_PIN E17 [get_ports {data[7]}]
set_property PACKAGE_PIN D18 [get_ports {data[6]}]
set_property PACKAGE_PIN H15 [get_ports {data[5]}]
set_property PACKAGE_PIN F16 [get_ports {data[4]}]
set_property PACKAGE_PIN K14 [get_ports {data[0]}]
set_property PACKAGE_PIN L15 [get_ports {data[1]}]
set_property PACKAGE_PIN G14 [get_ports {data[2]}]
set_property PACKAGE_PIN J14 [get_ports {data[3]}]
set_property PACKAGE_PIN J19 [get_ports {key[3]}]
set_property PACKAGE_PIN J20 [get_ports {key[2]}]
set_property PACKAGE_PIN H16 [get_ports {key[1]}]
set_property PACKAGE_PIN H20 [get_ports {key[0]}]
set_property PACKAGE_PIN G17 [get_ports {led[0]}]
set_property PACKAGE_PIN G19 [get_ports {led[1]}]
set_property PACKAGE_PIN G20 [get_ports {led[2]}]
set_property PACKAGE_PIN G18 [get_ports {led[3]}]
set_property PACKAGE_PIN K19 [get_ports {key_state[0]}]
set_property PACKAGE_PIN J18 [get_ports {key_state[1]}]
set_property PACKAGE_PIN H17 [get_ports {key_state[2]}]
set_property PACKAGE_PIN K18 [get_ports {key_state[3]}]

                //视频没办法插入,就这样子啦~

//好啦,摸鱼结束啦~( ̄▽ ̄~)(~ ̄▽ ̄)~

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

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

相关文章

WanAndroid(鸿蒙版)开发的第二篇

前言 DevEco Studio版本&#xff1a;4.0.0.600 WanAndroid的API链接&#xff1a;玩Android 开放API-玩Android - wanandroid.com 1、WanAndroid(鸿蒙版)开发的第一篇 其他一些参考点&#xff0c;请参考上面的WanAndroid开发第一篇 效果 首页实现 整体布局分为头部的Banne…

ARM学习(25)链接装载高阶认识

ARM学习&#xff08;25&#xff09;链接装载高阶认识 1、例子引出 笔者先引入几个编译链接的例子来介绍一下&#xff1a; 声明无效&#xff1a;declared implicitly&#xff1f;&#xff0c;属于编译错误还是链接错误&#xff1f; 编译阶段的错误&#xff0c;属于编译错误&am…

《量子计算:下一个大风口,还是一个热炒概念?》

引言 量子计算,作为一项颠覆性的技术,一直以来备受关注。它被认为是未来计算领域的一次革命,可能改变我们对计算能力和数据处理的理解。然而,随着技术的不断进步和商业应用的探索,人们开始思考,量子计算到底是一个即将到来的大风口,还是一个被过度炒作的概念? 量子计…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的夜间车辆检测系统(深度学习代码+UI界面+训练数据集)

摘要&#xff1a;开发夜间车辆检测系统对于自动驾驶技术具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个夜间车辆检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&#xff0c;展示了不同模型间…

Hadoop学习1:概述、单体搭建、伪分布式搭建

文章目录 概述基础知识Hadoop组件构成Hadoop配置文件 环境准备配置Hadoop配置下载配置环境变量 Hadoop运行模式Standalone Operation&#xff08;本地&#xff09;官方DemoWordCount单词统计Demo Pseudo-Distributed Operation&#xff08;伪分布式模式&#xff09;配置修改启动…

vscode使用remote-ssh免密连接服务器

你还在使用XShell、Hyper、FinalShell等等SSH客户端软件吗&#xff0c;作为前端的我们&#xff0c;一直在用的功能强大的开发工具vscode&#xff0c;早已实现SSH连接功能&#xff08;借助官方提供的插件&#xff09;。而且更加好用&#xff0c;可以直接打开服务器上的文件&…

使用npm版本管理工具解决npm 的EACCES permissions errors when installing packages globally错误

EACCES错误通常表示“权限被拒绝”&#xff0c;意味着您没有足够的权限来执行某个操作。在计算机领域&#xff0c;尤其是在文件系统和程序安装中&#xff0c;这个错误很常见。以下是可能导致EACCES错误的原因以及相应的解决方法&#xff1a; 文件系统权限&#xff1a;当您尝试…

❤️算法笔记❤️-(每日一刷-141、环形链表)

文章目录 题目思路解法 题目 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接…

【调参】如何为神经网络选择最合适的学习率lr-LRFinder-for-Keras

【调参】如何为神经网络选择最合适的学习率lr-LRFinder-for-Keras_学习率选择-CSDN博客文章浏览阅读9.2k次&#xff0c;点赞6次&#xff0c;收藏55次。keras 版本的LRFinder&#xff0c;借鉴 fast.ai Deep Learning course。前言学习率lr在神经网络中是最难调的全局参数&#x…

YOLOv9改进 添加可变形注意力机制DAttention

一、Deformable Attention Transformer论文 论文地址:arxiv.org/pdf/2201.00520.pdf 二、Deformable Attention Transformer注意力结构 Deformable Attention Transformer包含可变形注意力机制,允许模型根据输入的内容动态调整注意力权重。在传统的Transformer中,注意力是…

Qt 如何搭建lua的运行环境

一、lua简介 Lua 是一种强大的、高效的、轻量级的、可嵌入的脚本语言。它支持过程&#xff08;procedural&#xff09;编程、面向对象编程、函数式编程以及数据描述。Lua 是动态类型的&#xff0c;运行速度快&#xff0c;支持自动内存管理&#xff0c;因此被广泛用于配置、脚本…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Select)

提供下拉选择菜单&#xff0c;可以让用户在多个选项之间选择。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Select(options: Array<SelectOption>) 参数&#xff1a;…

HUAWEI 华为交换机 配置 MAC 地址漂移检测示例

组网需求 如 图 2-17 所示&#xff0c;网络中两台 LSW 间网线误接形成了网络环路&#xff0c;引起 MAC 地址发生漂 移、MAC 地址表震荡。 为了能够及时检测网络中出现的环路&#xff0c;可以在 Switch 上配置 MAC 地址漂移检测功能&#xff0c; 通过检测是否发生MAC 地址漂移…

网络学习:BGP路径属性分类

目录 前言&#xff1a; 路径属性分类 公认必遵 公认任意 可选过渡 可选非过渡 前言&#xff1a; 在默认情况下&#xff0c;到达同一目的地&#xff0c;BGP只走单条路径&#xff0c;并不会在多条路径之间执行负载均衡。对于IGP路由协议&#xff0c;当有多条路径可以到达同…

丘一丘正则表达式

正则表达式(regular expression,regex,RE) 正则表达式是一种用来简洁表达一组字符串的表达式正则表达式是一种通用的字符串表达框架正则表达式是一种针对字符串表达“简洁”和“特征”思想的工具正则表达式可以用来判断某字符串的特征归属 正则表达式常用操作符 操作符说明实…

[vscode]将命令行参数传递给调试目标

一、简介 本文介绍了在vscode中使用cmake工具时&#xff0c;如何传递参数给编译目标的方法。 前提&#xff1a;使用vscodecmake编译C/C程序。 二、方法 在.vscode/目录下新建settings.json文件&#xff0c;并将待传底的参数写在 cmake.debugConfig里。 下面介绍了一个示例&a…

DAY14二叉树迭代遍历

二叉树前序迭代法遍历 前序遍历是中左右&#xff0c;每次先处理的是中间节点&#xff0c;那么先将根节点放入栈中&#xff0c;然后将右孩子加入栈&#xff0c;再加入左孩子。 为什么要先加入 右孩子&#xff0c;再加入左孩子呢&#xff1f; 因为这样出栈的时候才是中左右的顺…

Stable Diffusion 如何写好提示词(Prompt)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 大家好&#xff0c;我是水滴~~ 本文深入探讨了如何撰写出优质的提示词&#xff0c;内容涵盖多个维度&#xff1a;提示词的多样化分类、模型应用中的经典提示词案例、提供丰富资源的提示词参考…

基于STM32的智慧农业管理系统设计与实现

文章目录 一、前言1.1 项目介绍【1】项目功能【2】设计实现的功能【3】项目硬件模块组成 1.2 设计思路1.3 传感器功能介绍1.4 开发工具的选择 二、EMQX开源MQTT服务器框架三、购买ECS云服务器3.1 登录官网3.2 购买ECS服务器3.3 配置安全组3.4 安装FinalShell3.5 远程登录到云服…

Java代码审计工程师直播第六期

本期直播课程将深入探讨Java代码审计的关键概念和技术。涵盖课题包括安全漏洞分析、代码审查方法、常见漏洞案例分析等。学员将通过实例掌握代码审计实战技能&#xff0c;提升对Java应用程序安全的认知和技能水平。 课程大小&#xff1a;6.1G 课程下载&#xff1a;https://do…