首页 > 其他分享 >[记]Rust在多线程里使用串口

[记]Rust在多线程里使用串口

时间:2022-08-18 13:33:42浏览次数:61  
标签:none OK unwrap use let 串口 serial 多线程 Rust

1.

toml

[dependencies]
serial = "0.4.0"
encoding = "0.2.33"

--

use std::io::{Read, Write};
use std::sync::{Arc, Mutex};
use std::thread;
use std::time::Duration;
use serial;
use encoding::{DecoderTrap,EncoderTrap, Encoding};
use encoding::all::GBK;
// extern crate serial;

// use std::time::Duration;
// use std::thread;
use serial::prelude::*;
use std::io::prelude::*;
//     pub fn write(&mut self, _v: &Vec<u8>) {
//         self.write(v)
//     }
// }

pub fn main() {
    const SETTINGS: serial::PortSettings = serial::PortSettings {
        baud_rate: serial::Baud9600,
        char_size: serial::Bits8,
        parity: serial::ParityNone,
        stop_bits: serial::Stop1,
        flow_control: serial::FlowNone,
    };

    let mut pport = serial::open("COM41").unwrap();
    pport.configure(&SETTINGS).unwrap();
    pport.set_timeout(Duration::from_millis(10)).unwrap();

    let port = Arc::new(Mutex::new(pport));
    let p2 = Arc::clone(&port);
    // let p2 = port.clone();

    let handle = thread::spawn(move || {
        let mut buf: Vec<u8> = (0..255).collect();

        for j in 0..100 {
            let mut _bytes_read = p2.lock().unwrap();
            if let Ok(zs) = _bytes_read.read(&mut buf[..]) {
                let data = GBK.decode(&buf[0..zs], DecoderTrap::Ignore).unwrap();
                println!("{}",data);
            }else{
                println!("none");
                thread::sleep(Duration::from_millis(300));
            }
         
            
        }
    });

    // let request_temperature: Vec<u8> = vec![0xAA];
    for i in 0..10 {
        {
            let mut ssend=port.lock().unwrap();
            ssend.write(&GBK.encode("at\r\n", EncoderTrap::Ignore).unwrap()).unwrap();
        // Mutex::unlock(ssend);
        }
        thread::sleep(Duration::from_millis(300));
    }

    handle.join();
}

输出

OK

none
none

OK


OK

none
none
none

OK


OK

none
none
none

OK

none
none

OK


OK

none
none
none

OK

none
none

OK

none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
View Code

 

标签:none,OK,unwrap,use,let,串口,serial,多线程,Rust
From: https://www.cnblogs.com/hardfood/p/16598393.html

相关文章

  • 记录QT QSqlDatabase SQLite 多线程使用时报错..
    首先QSqlDatabase同一个实例,不能多线程使用.如果多线程使用,需要给每个线程创建一个QSqlDatabase实例,一般是用Map维护各个线程实例链接,key是线程ID,value就是QSqlDa......
  • 多线程.线程同步
    同步方法:synchronized同步块:synchronized(Obj){}并发:多个线程操作同一个资源队列和锁每个对象都有一个锁,sleep不会释放锁由于同一进程的多个线程共享同一块存储空间......
  • 多线程.守护线程
    daemon守护线程分为用户线程和守护线程虚拟机必须确保用户线程执行完毕虚拟机不用等待守护线程执行完毕如,后台记录操作日志,监控内存,垃圾回收等待...package......
  • 关于多线程操作单个变量进行加1问题的分析
    关于多线程操作单个变量进行加1问题的分析  摘要:在多线程的学习中,我们经常会接触到一个例子,这个例子也是一个重要的面试题,在此我详细的分析这个问题。  问题:我们现有......
  • 多线程-浅析线程安全
    多线程-共享模型之管程本文章是根据黑马JUC课程编写,记录的笔记1共享带来的问题在平常开发中,很多时候都会遇到共享数据的问题,比如售票,库存。那么如何就会引出一个疑......
  • 多线程.线程优先级
    Priority优先级线程优先级用数字表示,范围从1~10Thread.MIN_PRIORITY=1;Thread.MAX_PRIORITY=10;Thread.NORM_PRIORITY=5;使用以下方式改变或获取优先级:g......
  • [记]Rust在多线程下修改共享变量的值
    1.usestd::time::Duration;usestd::sync::{Arc,Mutex};usestd::thread;fnmain(){letokz="2333".to_string();letapple=Arc::new(Mutex::......
  • SpringBoot 多线程
    关于SpringBoot中多线程的两个注解:@Async是spring为了方便开发人员进行异步调用而出现的。在方法上加入这个注解,spring会从线程池中获取一个新的线程来执行方法,实现异步调......
  • Nodejs 多进程与多线程
    为什么要使用多进程多进程与多线程介绍Nodejs多进程和多线程使用与区别cluster为什么需要多进程nodejs单线程,在处理http请求的时候一个错误都会导致进程退出,这是灾......
  • Python爬虫之多线程异步爬虫,非常详细
    Python爬虫之多线程爬虫在使用Python的过程中,我们可能遇到这样一个场景,需要下载某一个网站上的多个资源;例如:我们想下载豆瓣电影Top250所有的宣传图片具体代码如下......