#avionics #arinc #api #aerospace #api-bindings #no-std

no-std a653rs

适用于独立分区编程的Arinc653抽象库

10个不稳定版本 (4个破坏性更新)

0.6.0 2024年6月12日
0.5.0 2024年1月30日
0.4.1 2024年1月24日
0.3.3 2023年12月18日
0.2.1 2023年4月24日

#92 in 嵌入式开发

Download history 4/week @ 2024-04-29 21/week @ 2024-05-20 1/week @ 2024-05-27 13/week @ 2024-06-03 228/week @ 2024-06-10 119/week @ 2024-06-17 112/week @ 2024-06-24 1/week @ 2024-07-01 28/week @ 2024-07-15 23/week @ 2024-07-22 66/week @ 2024-07-29 37/week @ 2024-08-05 9/week @ 2024-08-12

每月135次下载
用于 4 包

MIT/Apache

145KB
2.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结构。

对于这两种情况,都定义了预述,提供了所有必需的结构、特性和类型别名。

  • bindings:用于虚拟机包装库
  • prelude:用于下游用户(分区和进程)

设计决策

该包提供多个特质,针对ARINC653标准中定义的特定功能。

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

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

将静态函数分离到特定的特质中,是因为这样即使是功能受限的虚拟机也能至少提供有限的集合,而不是没有任何功能。

虽然所需的功能与ARINC653标准中定义的功能密切相关,但它们并不相同。标准中的所有函数都不返回任何值。相反,它们接受引用作为参数,这些引用在函数调用过程中被修改。虽然我们的函数可以使用相同的结构,但我们选择了更类似于Rust风格的函数,其中我们至少在ReturnCode的NoError-case中返回一个预期的Ok类型的Result,在其他所有情况下返回一个ErrorReturnCode作为Err类型。

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

不安全函数

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

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

面向下游用户(分区和进程)的决策

待办事项

待办事项

  • 编写README
  • 编写RustDoc

许可信息

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

对于这个库,版权属于德国航空航天中心/德意志航空航天中心协会(DLR)。

版权 © 2023 德意志航空航天中心协会(DLR)

依赖关系

~0.4–1.3MB
~27K SLoC