use core::fmt::{write, Arguments}; use gd32vf103xx_hal::{ serial::Tx, pac::USART1, }; use riscv::interrupt::{self, Mutex}; #[macro_export] macro_rules! log { ($($args:tt)+) => { $crate::log::log_args(core::format_args!($($args)+)) } } #[macro_export] macro_rules! logln { () => ({ kprint!("\r\n") }); ($fmt: literal $(, $($arg: tt)+)?) => { log!(concat!($fmt, "\n") $(, $($arg)+)?) } } static mut TX: Mutex>> = Mutex::new(None); pub fn init(tx: Tx) { interrupt::free(|_cs| { unsafe { TX.get_mut().insert(tx) }; }); } pub fn log_args(args: Arguments) { interrupt::free(|_cs| { unsafe { TX.get_mut().as_mut().map(|tx| write(tx, args)) }; }); }