osiris/
macros.rs

1//! Macros for kernel development.
2
3#[macro_export]
4macro_rules! debug {
5    ($fmt:literal $(, $arg:expr)* $(,)?) => {
6        #[cfg(feature = "defmt")]
7        defmt::debug!($fmt $(, $arg)*);
8    };
9}
10
11#[macro_export]
12macro_rules! trace {
13    ($fmt:literal $(, $arg:expr)* $(,)?) => {
14        #[cfg(feature = "defmt")]
15        defmt::trace!($fmt $(, $arg)*);
16    };
17}
18
19#[macro_export]
20macro_rules! info {
21    ($fmt:literal $(, $arg:expr)* $(,)?) => {
22        #[cfg(feature = "defmt")]
23        defmt::info!($fmt $(, $arg)*);
24    };
25}
26
27#[macro_export]
28macro_rules! error {
29    ($fmt:literal $(, $arg:expr)* $(,)?) => {
30        #[cfg(feature = "defmt")]
31        defmt::error!($fmt $(, $arg)*);
32    };
33}
34
35#[macro_export]
36macro_rules! kprint {
37    ($($arg:tt)*) => {{}};
38}
39
40#[macro_export]
41macro_rules! kprintln {
42    ($($arg:tt)*) => ({
43        use core::fmt::Write;
44        use $crate::print::Printer;
45
46        let mut printer = Printer;
47        const MICROS_PER_SEC: u64 = 1000000;
48        let hz = $crate::time::mono_freq();
49        let secs = $crate::time::mono_now() / hz;
50        let rem = $crate::time::mono_now() % hz;
51        let frac = (rem * MICROS_PER_SEC) / hz;
52
53        write!(&mut printer, "[{}.{:06}] ", secs, frac).unwrap();
54        printer.write_fmt(format_args!($($arg)*)).unwrap();
55        printer.write_str("\n").unwrap();
56    });
57}