use 'spin_sleep' for more accurate execution rate, add "s", "m", "u" suffix support to the -C argument

This commit is contained in:
2020-10-10 20:41:46 +02:00
parent f2073fe7f4
commit c28fee88fe
6 changed files with 39 additions and 28 deletions
+19 -18
View File
@@ -92,22 +92,8 @@ impl AppConfig for Config {
clap::Arg::with_name("cycle")
.long("cycle")
.short("C")
.value_name("MILLIS")
.help("Cycle time (ms)")
.validator(|s| {
let t = s.trim();
if t.is_empty() {
Err("cycle time requires an argument".into())
} else {
if t.chars()
.find(|c| !c.is_ascii_digit())
.is_some() {
Err("cycle time requires an integer number".into())
} else {
Ok(())
}
}
})
.value_name("MICROS")
.help("Cycle time (us, append \"s\" or \"ms\" for coarser time)")
.takes_value(true),
)
}
@@ -115,8 +101,23 @@ impl AppConfig for Config {
fn configure(mut self, clap: &ArgMatches) -> anyhow::Result<Self> {
self.program_file = clap.value_of("input").unwrap().to_string();
self.assemble_only = clap.is_present("asm-only");
if let Some(c) = clap.value_of("cycle") {
self.cycle_time = Duration::from_millis(c.parse().unwrap());
if let Some(t) = clap.value_of("cycle") {
let (t, mul) = if t.ends_with("us") {
(&t[..(t.len()-2)], 1)
} else if t.ends_with("ms") {
(&t[..(t.len()-2)], 1000)
} else if t.ends_with("m") {
(&t[..(t.len()-1)], 1000)
} else if t.ends_with("u") {
(&t[..(t.len()-1)], 1)
} else if t.ends_with("s") {
(&t[..(t.len()-1)], 1000_000)
} else {
(t, 1)
};
self.cycle_time = Duration::from_micros(t.parse::<u64>().expect("parse -C value") * mul);
println!("ct = {:?}", self.cycle_time);
}
Ok(self)
}