按键+串口发送实验

摸鱼记录 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]}]

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

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

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

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

相关文章

CANopen转Profinet网关连接西门子PLC与变流器通讯

CANopen转Profinet网关&#xff08;XD-COPNm20&#xff09;在智能领域&#xff0c;变流器的应用非常广泛&#xff0c;变流器一般会采用CANopen协议。现场采用台达的变流器&#xff08;支持CANopen协议&#xff09;作为CANopen从站&#xff0c;S7-1500系列PLC做主站&#xff0c;…

ENVI 如何批量拆分多波段栅格

在处理遥感图像时&#xff0c;需要将多波段栅格进行拆分是很常见的需求。下面介绍一种方法&#xff0c;可以实现图像批量拆分并重命名。 打开ENVI的App Store 搜索并下载应用 在ENVI的App Store中搜索"将多波段图像拆分成多个单波段文件"&#xff0c;并下载安装。 打…

索引失效的介绍和避免方法

索引是什么 在关系数据库 中&#xff0c;索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种 存储结构 &#xff0c;它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。 索引的作用相当于图书的目录&#xff0c;可以根据…

20240309web前端_第一周作业_完成用户注册界面

作业一&#xff1a;完成用户注册界面 成果展示&#xff1a; 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-…

MyBatis拦截器四种类型和自定义拦截器的使用流程

文章目录 MyBatis拦截器四种类型和自定义拦截器的使用流程一、MyBatis拦截器四种类型的详细解释&#xff1a;1. **ParameterHandler 拦截器**&#xff1a;2. **ResultSetHandler 拦截器**&#xff1a;3. **StatementHandler 拦截器**&#xff1a;4. **Interceptor Chain 拦截器…

软考高级:统计过程阶段和工作流概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的常见车型识别系统(Python+PySide6界面+训练代码)

摘要&#xff1a;本文深入探讨了如何应用深度学习技术开发一个先进的常见车型识别系统。该系统核心采用最新的YOLOv8算法&#xff0c;并与早期的YOLOv7、YOLOv6、YOLOv5等版本进行性能比较&#xff0c;主要评估指标包括mAP和F1 Score等。详细解析了YOLOv8的工作机制&#xff0c…

逆向案例七——中国天气质量参数搜不到加密,以及应对禁止打开开发者工具和反debuger技巧

进入相关城市数据页面&#xff0c;发现不能调试 应对方法&#xff0c;再另一个页面&#xff0c;打开开发者工具&#xff0c;选择取消停靠到单独页面 接着&#xff0c;复制链接在该页面打开。接着会遇到debugger 再debugger处打上断点&#xff0c;一律不在此处暂停。 然后点击继…

InnoDB索引优化

索引 覆盖索引 最左前缀原则 索引下推优化 如果我执行 select * from T where k between 3 and 5 这条语句&#xff08;k 是索引&#xff09;&#xff0c;需要执行几次树的搜索操作&#xff0c;会扫描多少行&#xff1f; 这条 SQL 查询语句的执行流程…

Promise其实也不难

难点图解&#xff1a;then&#xff08;&#xff09;方法 ES6学习网站&#xff1a;ES6 入门教程 解决&#xff1a;回调地狱&#xff08;回调函数中嵌套回调&#xff09; 两个特点&#xff1a; &#xff08;1&#xff09;对象的状态不受外界影响。Promise对象代表一个异步操作&…

前端精准测试简介

一&#xff0c; 前端精准测试架构介绍 今年从零开始完成了前端精准测试整体功能的开发&#xff0c;在基于istanbul插件的基础之间&#xff0c;实现覆盖率数据的采集&#xff0c;并根据服务端和移动端精准测试的整体架构&#xff0c;实现前端精准测试体系。整体架构及核心功能…

【李沐论文精读】GPT、GPT-2和GPT-3论文精读

论文&#xff1a; GPT&#xff1a;Improving Language Understanding by Generative Pre-Training GTP-2&#xff1a;Language Models are Unsupervised Multitask Learners GPT-3&#xff1a;Language Models are Few-Shot Learners 参考&#xff1a;GPT、GPT-2、GPT-3论文精读…

七个项目掌握freertos

1、闪烁LED&#xff1a; 最基本的示例项目&#xff0c;涉及到创建一个简单的任务&#xff0c;用于控制LED的闪烁。这个项目会教你如何初始化FreeRTOS并创建任务。 #include "FreeRTOS.h" #include "task.h" #define LED_PIN (某个GPIO引脚)void vBlinkTas…

555经典电路

1、555介绍&#xff1a; 555 定时器是一种模拟和数字功能相结合的中规模集成器件。一般用双极性工艺制作的称为 555&#xff0c;用 CMOS 工艺制作的称为 7555&#xff0c;除单定时器外&#xff0c;还有对应的双定时器 556/7556。555 定时器的电源电压范围宽&#xff0c;可在 4…

20240312-2-贪心算法

贪心算法 是每次只考虑当前最优&#xff0c;目标证明每次是考虑当前最优能够达到局部最优&#xff0c;这就是贪心的思想&#xff0c;一般情况下贪心和排序一起出现&#xff0c;都是先根据条件进行排序&#xff0c;之后基于贪心策略得到最优结果。 面试的时候面试官一般不会出贪…

I2C驱动AT24C02

文章目录 一、硬件电路设备地址 二、使用步骤字节写:页写入:任意写:任意读: 一、硬件电路 设备地址 设备需要一个8位的设备地址字&#xff0c;后面跟着一个启动条件&#xff0c;以使芯片能够进行读或写操作 设备地址字由一个强制的1,0序列的前四个最有效的位&#xff0c;如所示…

嵌入式面试收到了两个offer,一个单片机开发,一个Linux开发,不知道如何选择?

今天看到一个问题&#xff1a; 如果你想真正解决选择困难症的问题&#xff0c;请花几分钟&#xff0c;看完这篇内容。 我做了单片机开发多年&#xff0c;还是有感而发的。 我职业生涯里&#xff0c;做过最错误的决定&#xff0c;就是哪个公司工资开的高&#xff0c;就去哪里。 …

数据结构·复杂度

目录 1 时间复杂度 2 大O渐进表示法 举例子&#xff08;计算时间复杂度为多少&#xff09; 3 空间复杂度 前言&#xff1a;复杂度分为时间复杂度和空间复杂度&#xff0c;两者是不同维度的&#xff0c;所以比较不会放在一起比较&#xff0c;但是时间复杂度和空间复杂度是用…

LeetCode 每日一题 Day 95-101

2917. 找出数组中的 K-or 值 给你一个整数数组 nums 和一个整数 k 。让我们通过扩展标准的按位或来介绍 K-or 操作。在 K-or 操作中&#xff0c;如果在 nums 中&#xff0c;至少存在 k 个元素的第 i 位值为 1 &#xff0c;那么 K-or 中的第 i 位的值是 1 。 返回 nums 的 K-o…

中医药专家学者齐聚丽江 把脉健康产业新发展

3月10日&#xff0c;中国丽江第二届健康产业发展论坛暨全国卫生健康技术推广传承应用项目技能大赛在丽江&#xff08;国际&#xff09;民族文化交流中心隆重开幕。国内生物科学、中医学领域的多名专家学者齐聚丽江&#xff0c;探讨健康产业的未来发展趋势&#xff0c;为丽江乃至…