Move print_now to a standalone function, to make sure the timer driver is dropped before being used again.
diff --git a/examples/now.rs b/examples/now.rs
index d074317..b14b081 100644
--- a/examples/now.rs
+++ b/examples/now.rs
@@ -9,20 +9,32 @@
 use libtock::timer;
 use libtock::timer::Duration;
 
+const DELAY_MS: usize = 500;
+
 #[libtock::main]
 async fn main() -> TockResult<()> {
-    const DELAY_MS: usize = 500;
-
     let mut console = Console::new();
     let mut previous_ticks = None;
 
     for i in 0.. {
-        let mut timer_with_callback = timer::with_callback(|_, _| {});
-        let timer = timer_with_callback.init()?;
-        let current_clock = timer.get_current_clock()?;
-        let ticks = current_clock.num_ticks();
-        let frequency = timer.clock_frequency().hz();
-        writeln!(
+        print_now(&mut console, &mut previous_ticks, i)?;
+        timer::sleep(Duration::from_ms(DELAY_MS as isize)).await?;
+    }
+
+    Ok(())
+}
+
+fn print_now(
+    console: &mut Console,
+    previous_ticks: &mut Option<isize>,
+    i: usize,
+) -> TockResult<()> {
+    let mut timer_with_callback = timer::with_callback(|_, _| {});
+    let timer = timer_with_callback.init()?;
+    let current_clock = timer.get_current_clock()?;
+    let ticks = current_clock.num_ticks();
+    let frequency = timer.clock_frequency().hz();
+    writeln!(
             console,
             "[{}] Waited roughly {:?}. Now is {:?} = {:#010x} ticks ({:?} ticks since last time at {} Hz)",
             i,
@@ -32,10 +44,7 @@
             previous_ticks.map(|previous| ticks - previous),
             frequency
         )?;
-        previous_ticks = Some(ticks);
-        timer::sleep(Duration::from_ms(DELAY_MS as isize)).await?;
-    }
-
+    *previous_ticks = Some(ticks);
     Ok(())
 }