7 个不稳定版本 (3 个破坏性更新)

0.6.0 2024年6月12日
0.4.1 2024年1月24日
0.3.3 2023年12月18日
0.3.1 2023年6月5日
0.2.0 2023年4月24日

#990过程宏

Download history 9/week @ 2024-04-14 21/week @ 2024-04-21 3/week @ 2024-04-28 22/week @ 2024-05-19 10/week @ 2024-05-26 15/week @ 2024-06-02 191/week @ 2024-06-09 104/week @ 2024-06-16 93/week @ 2024-06-23 1/week @ 2024-06-30 25/week @ 2024-07-14 21/week @ 2024-07-21 68/week @ 2024-07-28

每月114次下载
用于 a653rs

MIT/Apache

68KB
1.5K SLoC

a653rs 最新版本 a653rs a653rs_macros Zenodo

所需服务 https://www.aviation-ia.com/support-files/arinc653h

扩展服务 https://www.aviation-ia.com/support-files/arinc653p2h

a653rs 的位置

a653rs 应用于作为Hypervisor-Wrapper-Library、分区和进程的依赖项。

一个潜在的Hypervisor-Wrapper-Library将使用引入的Apex traits来提供符合ARINC653规范的虚拟机应有的功能。

下游的Rust编写的分区和进程将使用a653rs与任何实现a653rs的Hypervisor-Wrapper-Library结合使用,以获得使用Apex功能的安全抽象Apex结构。

对于这两种情况,都定义了preludes,提供所有所需的structs、traits和type-aliases。

  • bindings:用于Hypervisor-Wrapper-Library
  • prelude:用于下游用户(分区和进程)

设计决策

此crate提供了多个traits,针对ARINC653标准中定义的特定功能。

  • ApexBlackboardP1
  • ApexBufferP1
  • ApexErrorP1/P4
  • ...

这些特性要求实现者实现与ARINC653标准中定义的函数密切相关的静态函数(参见所需服务中的头文件)。这些函数的实现很可能只是将bindgen绑定到虚拟机的底层C函数。

将这些静态函数分离成特定的特性是因为这种方式,即使能力有限的虚拟机也能至少提供有限的功能集,而不是没有任何功能。

尽管所需函数与ARINC653标准中定义的函数密切相关,但它们并不相同。标准中的所有函数都不返回任何值。相反,将引用传递给它们,这些引用在函数调用过程中被修改。虽然我们的函数可以使用相同的结构,但我们选择了更类似于Rust的函数风格,其中至少在返回代码的Ok情况下返回预期的类型,并在所有其他情况下返回ErrorReturnCode作为Err类型。

ErrorReturnCode只是没有NoError变体的ARINC653特定ReturnCode枚举类型。

不安全函数

虽然预期实现虚拟机包装库需要使用大量不安全代码块和函数,但我们的特性中只有一种类型的函数被明确标记为不安全:接受可变引用作为参数的函数。仅将可变引用传递给读取/接收函数,这些函数接受对ApexByte切片的可变引用。由于如果用户提供的可变切片太小将会非常不安全,因此此函数被标记为不安全。

因此,我们通常在我们的抽象中提供两个函数。一个是安全函数,它会检查用户提供的可变切片是否至少可以容纳定义的最大消息大小;另一个是不安全函数,它只希望读取/接收到的消息长度不超过用户期望的长度。

针对下游用户(分区和进程)的决策

待办事项

待办事项

  • 编写README
  • 编写RustDoc

许可信息

ARINC 653标准属于航空无线电公司(ARINC)。

对于这个库,版权属于德国航空航天中心 / 德意志航空航天中心 e.V.(DLR)

版权 © 2023 德意志航空航天中心 e.V.(DLR)

依赖关系

~2.5MB
~44K SLoC