5个版本 (3个重大更改)
0.5.0 | 2024年4月1日 |
---|---|
0.4.0 | 2024年3月16日 |
0.3.1 | 2024年3月8日 |
0.3.0 | 2024年3月8日 |
0.2.0 | 2024年3月3日 |
#161 in 嵌入式开发
230KB
5.5K SLoC
MIL STD 1553B
此库实现了一套完整的Rust结构体,用于解析或构建符合MIL STD 1553B通信协议的消息。
功能
以下功能使得该库适用于受限制的嵌入式系统,可用于政府、商业或军事项目,这些项目不能使用病毒式许可的依赖项。
- 不使用标准库 (
no_std
) - 不分配动态内存
- 无依赖项 *
- MIT授权
* 无运行时依赖项。如果您使用derive
功能标志,您将需要构建proc-macro依赖项,但这些依赖项是在主机上构建和使用的,而不是在目标系统上。
基本用法
创建消息
消息可以使用Message、CommandWord、StatusWord和数据Word的构造函数方法构建。
use mil_std_1553b::*;
let message = Message::<3>::new()
.with_command(CommandWord::new()
.with_address(Address::Value(12))
.with_subaddress(SubAddress::Value(5))
.with_word_count(2)
.build().unwrap()
)
.with_data(DataWord::new())
.with_data(DataWord::new())
.build()
.unwrap();
assert_eq!(message.length(),3);
解析消息
命令消息
消息可以解析为命令消息,前面的命令字将确定从缓冲区解析多少个数据字。
use mil_std_1553b::*;
let message: Message = Message::read_command(&[
0b10000011,
0b00001100,
0b00100010,
0b11010000,
0b11010010
])
.unwrap();
assert_eq!(message.length(),2);
状态消息
use mil_std_1553b::*;
let message: Message = Message::read_status(&[
0b10000011,
0b00001100,
0b01000010,
0b11010000,
0b11010010
])
.unwrap();
assert_eq!(message.length(), 2);
解析字
可以从两个字节的字节数组或u16s解析字。数据字也可以从字符串创建。
use mil_std_1553b::*;
let word = DataWord::new()
.with_bytes([0b01001000, 0b01001001])
.with_calculated_parity()
.build()
.unwrap();
assert_eq!(word.as_string(),Ok("HI"));
路线图
1.0.0
- 实现的字
- 创建命令、状态和数据字
- 可以从二进制中解析字
- 可以将字转换为二进制
- 字具有解析测试
- 字具有转换测试
- 为字存在文档
- 实现的消息
- 创建消息结构体
- 可以从字构造消息
- 可以从二进制解析消息
- 消息具有解析测试
- 消息具有转换测试
- 为消息存在文档
- 便利性、标准化、文档
- 为消息创建自定义字和宏的derive/macro
- 对枚举和标志标准化的小型修复
- 全面文档化的代码库
- 强制执行最大lint并无不安全代码
- 实现了集成测试
- 为所有主机构建 CI/CD 管道 -> 跨编译目标
- 消息存在双向测试(二进制 -> 结构体 -> 二进制)
- 单词存在双向测试(二进制 -> 结构体 -> 二进制)
- 单词存在配置测试(JSON)
- 消息存在配置测试(JSON)
2.0.0
- 消息模式构造器已设计
- 有向模式构造器已实现
- BC - RT 模式已实现
- BC - RT 模式测试已实现
- RT - BC 模式已实现
- RT - BC 模式测试已实现
- RT - RT 模式已实现
- RT - RT 模式测试已实现
- 无数据模式(T)已实现
- 无数据模式(T)测试已实现
- 带数据模式(T)已实现
- 带数据模式(T)测试已实现
- 带数据模式(R)已实现
- 带数据模式(R)测试已实现
- 广播模式构造器已实现
- BC - RT 模式已实现
- BC - RT 模式测试已实现
- RT - RT 模式已实现
- RT - RT 模式测试已实现
- 无数据模式已实现
- 无数据模式测试已实现
- 带数据模式已实现
- 带数据模式测试已实现
备注
单词
在 1553B 标准中,“单词”由二十位组成。包括三个同步位,16位数据(三种不同格式之一),以及一个尾随奇偶校验位 ^1。这意味着有两种方式引用特定的位——要么从“单词数据”开始的位索引偏移,要么从包括同步位在内的单词开始的“位时间”偏移。
索引 | 同步1 | 同步2 | 同步3 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 奇偶校验 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
时间 | - | - | - | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | - |
偏移 | - | - | - | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | - |
标准中使用了位时间参考,但由于我们在这个项目中只处理每个单词中的16位数据,所以实际代码中将使用零索引参考。
依赖关系
~225KB