Итак, у меня есть некоторые данные, проходящие через последовательный порт через определенные промежутки времени. Восемь байтов отправляются каждые 2 секунды.
Я бы прочитал эти данные. Поскольку передача идет постоянно, я не могу просто начать читать в любой момент. Мне нужно выровнять данные. Итак, ясно, что способ сделать это - послать заголовок или какой-нибудь разделитель байтов.
С чертой Read
я могу прочитать определенное количество байтов в свой буфер. Это может выглядеть так:
let mut serial_buf: Vec<u8> = vec![0; 16];
loop {
match port.read(serial_buf.as_mut_slice()) {
Ok(t) => print_data(&serial_buf[..t]),
Err(ref e) if e.kind() == std::io::ErrorKind::TimedOut => (),
Err(e) => eprintln!("{:?}", e),
}
}
Но результат, который я получаю, будет выглядеть примерно так без выравнивания (с байтами abcd, отправляемыми каждые 2 секунды):
abcd
a
bcd
abc
d
a
bcd
ab
cd
Итак Каков наиболее практичный способ чтения и сброса до тех пор, пока не будет найден бит выравнивания, а затем убедиться, что все последующие чтения выровнены?
Спасибо,