1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
//! Logging facilities for Cortex-M processors
//!
//! ## Destinations
//!
//! The crate provides following destinations for writes:
//! - [Dummy](destination/dummy/struct.Dummy.html) - noop destination that performs no writes. Useful for release mode
//! - [Itm](destination/itm/struct.Itm.html) - Uses Cortex-M [Itm](https://docs.rs/cortex-m/0.5.1/cortex_m/itm/index.html) to send output. Note that it is available only on ARMv7-M and newer
//! - [Semihosting](destination/semihosting/trait.SemihostingComp.html) - Uses Cortex-M [Semihosting](https://docs.rs/cortex-m-semihosting) to send output.
//!
//! All destinations implements [fmt::Write](https://doc.rust-lang.org/core/fmt/trait.Write.html)
//! to provide simple and generic interface
//!
//! ## Printers
//!
//! Each destination is provided with corresponding [Printer](printer/trait.Printer.html).
//! In addition to providing generic interface it also allows to configure Interrupt mode for all
//! prints. [See](modes/index.html).
//!
//! ## Macros
//!
//! The crate provide primitieve macros that are enabled only in debug release.
//! Controlled by `debug_assertions` attribute
//!
//! ```rust
//! use cortex_m_log::{print, println, d_print, d_println};
//! use cortex_m_log::printer::Dummy;
//!
//! fn main() {
//! let mut log = Dummy::new();
//! println!(log, "Some print with newline!");
//! //Debug version of print that resolves into nothing in release mode
//! //Note that you must import print macro for it to work
//! d_print!(log, "Print stuff: {}", "stuff");
//! //Note that you must import println macro for it to work
//! d_println!(log, "Print stuff: {} and also newline", "stuff");
//! }
//! ```
#![no_std]
#![warn(missing_docs)]
#![cfg_attr(feature = "cargo-clippy", allow(clippy::style))]
pub mod modes;
pub mod destination;
pub mod printer;
#[cfg(feature = "log-integration")]
pub mod log;
///Print macro that uses Printers to write formatted output
#[macro_export]
macro_rules! print {
($logger:expr, $($arg:tt)+) => ({
use $crate::printer::Printer;
$logger.print(format_args!($($arg)+));
})
}
///Print macro that uses Printers to write formatted output with newline
#[macro_export]
macro_rules! println {
($logger:expr, $($arg:tt)+) => ({
use $crate::printer::Printer;
$logger.println(format_args!($($arg)+));
})
}
///Deubg print macro that uses Printers to write formatted output
///
///It is defined to empty macro unless `debug_assertions` is enabled
#[macro_export]
#[cfg(not(debug_assertions))]
macro_rules! d_print {
($logger:expr, $($arg:tt)+) => ({
})
}
///Deubg print macro that uses Printers to write formatted output
///
///It is defined to empty macro unless `debug_assertions` is enabled
#[macro_export]
#[cfg(debug_assertions)]
macro_rules! d_print {
($logger:expr, $($arg:tt)+) => ({
print!($logger, $($arg)+)
})
}
///Deubg print macro that uses Printers to write formatted output with newline
///
///It is defined to empty macro unless `debug_assertions` is enabled
#[macro_export]
#[cfg(not(debug_assertions))]
macro_rules! d_println {
($logger:expr, $($arg:tt)+) => ({
})
}
///Deubg print macro that uses Printers to write formatted output with newline
///
///It is defined to empty macro unless `debug_assertions` is enabled
#[macro_export]
#[cfg(debug_assertions)]
macro_rules! d_println {
($logger:expr, $($arg:tt)+) => ({
println!($logger, $($arg)+)
})
}