15个不稳定版本 (5个重大更改)
0.5.3 | 2021年1月30日 |
---|---|
0.4.1 | 2020年11月17日 |
0.3.1 | 2020年1月23日 |
0.3.0 | 2019年12月14日 |
0.0.2 | 2019年7月30日 |
#1819 in 嵌入式开发
每月下载量 76次
在ruspiro-sdk中使用
14KB
82 行
简单的控制台抽象RusPiRo crate
此crate提供控制台抽象,以实现字符串输出到可配置的输出通道。它还提供了方便的宏(print!
和 println!
),用于输出通常在 [no_std]
环境中不可用的文本。然而,此crate还提供了宏来指示要打印的消息的严重性。这些是 info!
、warn!
和 error!
。
依赖关系
此crate使用宏来提供格式化字符串。这种格式化需要一个内存分配器(作为 alloc
crate 的一部分)。因此,当使用此crate时,提供如 ruspiro_allocator
的分配器。
使用方法
要使用此crate,只需将以下依赖项添加到您的 Cargo.toml
文件中
[dependencies]
ruspiro-console = "0.5.3"
一旦控制台crate可用,就可以使用常用的宏 print!
和 println
输出字符串。然而,如果没有实际设置控制台输出,这些语句将不会在任何地方写入任何数据
use ruspiro_console::*;
fn demo() {
let num: u32 = 10;
println!("This is some text with a number: {}", num);
}
要实际设置活动输出通道,您需要提供一个实现 core::fmt::Write
特性的结构。例如,在Uart中可以这样完成
impl core::fmt::Write for Uart1 {
fn write_str(&mut self, s: &str) -> core::fmt::Result {
self.send_string(s);
Ok(())
}
}
如果实现了此特性,则可以使用该结构作为实际的控制台。要使用它,应在二进制的主crate的最早可能位置(例如内核)编写以下代码
use ruspiro_console::*;
use ruspiro_uart::*; // as we demonstrate the usage with the Uart.
fn demo() {
let mut uart = Uart1::new(); // create a new uart struct
if uart.initialize(250_000_000, 115_200).is_ok() { // initialize the Uart with fixed core rate and baud rate
CONSOLE.with_mut(|cons| cons.replace(uart)); // from this point CONSOLE takes ownership of Uart
// uncommenting the following line will give compiler error as uart is moved
// uart.send_string("I'm assigned to a console");
}
// if everything went fine uart should be assigned to the console for generic output
println!("Console is ready and display's through uart");
}
您还可以使用控制台crate初始化日志记录到Uart,当使用 log 的 info!
、warn!
或 error!
宏时。
use ruspiro_console::*;
use ruspiro_uart::*; // as we demonstrate the usage with the Uart.
fn demo() {
let mut uart = Uart1::new(); // create a new uart struct
if uart.initialize(250_000_000, 115_200).is_ok() { // initialize the Uart with fixed core rate and baud rate
init_logger(LevelFilter::Error, uart); // from this point the logger takes ownership of uart
}
// if everything went fine uart should be assigned to the console for generic output
println!("Console is ready and display's through uart");
}
!提示!由于
Write
特性要求在写入输出通道时结构是可变的,因此控制台操作是阻塞操作 -> 因此需要可能的原子操作 -> 因此需要在使用控制台抽象之前激活 MMU。否则,由于CPU无法处理原子操作,执行将 挂起。
许可证
根据Apache许可证版本2.0许可,或MIT许可证选择使用(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)或MIT(LICENSE-MIT 或 http://opensource.org/licenses/MIT)。
依赖关系
~160KB