Я пытаюсь читать и записывать в свой последовательный порт в Linux для связи с микроконтроллером, и я пытаюсь сделать это в Rust.
Мой обычный шаблон при разработке, скажем, на C ++ или Python - этоу меня два потока: один, который периодически отправляет запросы по последовательному каналу, и другой, который читает байты из буфера и обрабатывает их.
В Rust у меня возникают проблемы с проверкой заимствований при использовании последовательного ящика.Это имеет смысл для меня, почему это так, но я не уверен, как будет выглядеть проектирование интерфейса асинхронной связи в Rust.Вот фрагмент моего источника:
let mut port = serial::open(&device_path.as_os_str()).unwrap();
let request_temperature: Vec<u8> = vec![0xAA];
thread::spawn(|| {
let mut buffer: Vec<u8> = Vec::new();
loop {
let _bytes_read = port.read(&mut buffer);
// process data
thread::sleep(Duration::from_millis(100));
}
});
loop {
port.write(&request_temperature);
thread::sleep(Duration::from_millis(1000));
}
Как я могу эмулировать эту функцию, когда у меня есть два потока, удерживающие изменяемый ресурс в Rust?Я знаю, что поскольку этот конкретный пример может быть выполнен в одном потоке, но я думаю, что для более крупной программы это может быть несколько потоков.