Open
Description
I have just released embedded-time
to handle clocks, instants, durations more easily in embedded contexts. It follows a similar idea to the C++ std::chrono
library. I'd love to get some feedback, suggestions, PRs, etc.
embedded-time
provides a comprehensive library for implementing abstractions over hardware and work with clocks, instants, durations, periods, and frequencies in a more intuitive way.
- Clock trait allowing abstraction of hardware timers for timekeeping.
- Work with time using milliseconds, seconds, hertz, etc. rather than cycles or ticks.
- Includes example for the nRF52_DK board
- Conversion to/from
core::time::Duration
Example Usage:
struct SomeClock;
impl Clock for SomeClock {
type Rep = i64;
fn now() -> Instant<Self> {
// read the count of the clock
// ...
Instant::new(count as Self::Rep)
}
}
impl Period for SomeClock {
// this clock is counting at 16 MHz
const PERIOD: Period = Period::raw(1, 16_000_000);
}
// read from a Clock
let instant1 = SomeClock::now();
// ... some time passes
let instant2 = SomeClock::now();
assert!(instant1 < instant2); // instant1 is *before* instant2
// duration is the difference between the instances
let duration: Option<Microseconds<i64>> = instant2.duration_since(&instant1);
// add some duration to an instant
let future_instant = instant2 + Milliseconds(23);
// or
let future_instant = instant2 + 23.milliseconds();
assert(future_instant > instant2);