From 71579aaa9f983de94eedd95882a6589fb7c89cdf Mon Sep 17 00:00:00 2001 From: Lotte Steenbrink Date: Fri, 19 Jun 2020 15:53:28 +0200 Subject: [PATCH] sketch --- tools/dk-run/src/main.rs | 41 ++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/tools/dk-run/src/main.rs b/tools/dk-run/src/main.rs index 63da642..0e2e5b0 100644 --- a/tools/dk-run/src/main.rs +++ b/tools/dk-run/src/main.rs @@ -192,32 +192,33 @@ fn notmain() -> Result { // run let core = Rc::new(core); - let rtt_addr_result = rtt_addr.ok_or_else(|| anyhow!("RTT control block not available"))?; - let mut rtt: Result; - let mut num_retries = 3; // picked at random, increase if necessary + let rtt_addr_res = rtt_addr.ok_or_else(|| anyhow!("RTT control block not available"))?; + let mut rtt_res: Result = + Err(probe_rs_rtt::Error::ControlBlockNotFound); + const NUM_RETRIES: usize = 3; // picked at random, increase if necessary - loop { - rtt = Rtt::attach_region( - core.clone(), - &sess, - &ScanRegion::Exact(rtt_addr_result), - ); - - match rtt { - Ok(_) => { break; } - Err(res) => { - num_retries -= 1; - if num_retries == 0 { - log::info!("Max number of retries exceeded. Giving up."); - return Err(anyhow!(res)); + for try_index in 0..NUM_RETRIES { + rtt_res = Rtt::attach_region(core.clone(), &sess, &ScanRegion::Exact(rtt_addr_res)); + match rtt_res { + Ok(_) => { + log::info!("Successfully attached RTT"); + break; + } + Err(probe_rs_rtt::Error::ControlBlockNotFound) => { + if try_index < NUM_RETRIES { + log::info!("Attaching RTT failed. retrying"); + } else { + log::info!("Max number of retries exceeded. Giving up"); + return Err(anyhow!(probe_rs_rtt::Error::ControlBlockNotFound)); } - log::info!("Attaching RTT failed. retrying"); + } + Err(e) => { + return Err(anyhow!(e)); } } } - log::info!("Successfully attached RTT"); - let channel = rtt + let channel = rtt_res .unwrap() // using ? instead wouldn't show the user any helpful error message .up_channels() .take(0)