3个版本 (破坏性)
0.3.0 | 2020年1月3日 |
---|---|
0.2.0 | 2020年1月2日 |
0.1.0 | 2020年1月2日 |
#703 in 嵌入式开发
17KB
281 行
mju-bits
#[no_std]
实现了针对 u8
、u16
、u32
、u64
和 usize
的类型化位字段访问。
使用方法
use mju_bits::*;
struct RegisterMarker;
type Register = Storage<RegisterMarker, u32>;
type RegisterAll = BitField<Register, U0, U31>;
type RegisterFieldA = BitField<Register, U0, U7>;
type RegisterFieldB = BitField<Register, U8, U24>;
let mut reg = Register::new();
reg.set::<RegisterFieldA>(0x56);
reg.set::<RegisterFieldB>(0x1234);
assert_eq!(reg.get::<RegisterAll>(), 0x00123456);
Storage类型确保字段只能与其对应的存储一起使用。
例如,以下代码无法编译
use mju_bits::*;
struct FooMarker;
type Foo = Storage<FooMarker, u8>;
type FooField = BitField<Foo, U0, U1>;
struct BarMarker;
type Bar = Storage<BarMarker, u8>;
let bar = Bar::new();
// Compiler error: FooField can not be used with Bar storage.
bar.get::<FooField>();
路线图
- 跨越多个原始类型的位字段
- 支持函数式协议定义的BitFields的可迭代序列
- 与nightly上的泛型常量兼容的实现
- 改进类型以便支持更大的位字段 - 128位字段会破坏typenum
- 其他呢?
变更日志
- 0.3.0 - 移除
B0
..B63
别名以避免与typenum::B0
和typenum::B1
混淆 - 0.2.0 - 文档和清理
- 0.1.0 - 首次发布
依赖
~155KB