环境情况
- --target thumbv7m-none-eabi --release
- thumbv7m-none-eabi的core库是直接rustup装的
- rust代码编译生成staticlib嵌入到keil中编译最终bin文件
实际发现当实现了Write并使用其做一些格式化字符串并实现打印函数后,最终bin相差接近20KB。 代码如下:
macro_rules! println {
() => { puts("\r\n".as_bytes()); };
($fmt: expr) => { puts(concat!("[", file!(), ":", line!(), "] ", $fmt, "\r\n\0").as_bytes()); };
($fmt: expr, $($arg:tt)*) => {{
if cfg!(feature = "no_fmt_str") {
//puts(concat!("[", file!(), ":", line!(), "] fmt_str is disabled\r\n\0").as_bytes());
} else {
let mut buf = [0u8; 256];
let mut wb = WriteBuf::new(&mut buf);
let _ = write!(&mut wb, concat!("[{}:{}] ", $fmt, "\r\n"), file!(), line!(), $($arg)*);
puts(buf.as_ref());
}
}};
}
使用Write Trait后KEIL map文件:
Code (inc. data) RO Data RW Data ZI Data Debug Library Member Name
358 0 0 0 0 3499 compiler_builtins-19e25674e7d0fac3.compiler_builtins.1u0h3z3x-cgu.117.rcgu.o
9612 96 3909 0 0 569329 core-e44ff3898b5c1dc9.core.3d6vvluw-cgu.0.rcgu.o
不使用Write这2个是直接没有的,一直挺疑惑rust是在那个阶段完成字符串转换的,这个看起来有点像直接代码内置字符串映射表
请问下是否有办法可以解决这个问题,20KB为了一个格式化字符串,开销有点大,有没有办法裁剪?
1
共 2 条评论, 1 页
评论区
写评论感谢! 这个是自己实现了一套格式化方法,意思是core::fmt::Write没法裁剪或自定义吗?
--
👇
12101111: https://crates.io/crates/ufmt
https://crates.io/crates/ufmt