本帖最后由 duo点 于 2024-2-21 10:43 编辑
嵌入式系统中的 Rust
Embedded Rust 的结构可以分为上述5层,如上图所示,从下往上的顺序,最底层是MCU硬件层,有各个资源,外设,由不同的芯片决定;第2层是PAC,可以理解为芯片的头文件,里面是各个寄存器的信息;第3层是在PAC的基础上对寄存器进行操作一些调度函数,里面对寄存器进行直接操作;第4层是硬件抽象层,这一层的意义是从芯片强相关的驱动函数上抽象出来,提供一个通用接口,这个通用接口由最上层的软件驱动层、软件应用层去调用,实现对芯片资源的调度。
在Embedded Rust中,使用svd2rust工具将芯片资源的描述文件SVD文件转化为PAC,该接口具有良好的可读性,便于审查和维护。此外,它还能防止出现错误,因为如果设置的值对该字段无效,代码将无法编译。
RUST 与 C 语言的关系 Rust对硬件的内存需求,堆栈使用,运行效率可以和C相媲美,具体的细节差异会和编译优化等级,应用等有些许差异。 此外,Rust有一个令人振奋的点,它可以和C语言共同使用。 Rust和C代码间的互用性始终取决于两种语言间的数据转换。为了实现互用性,在stdlib中,有两个专用模块,叫做std::ffi和std::os::raw 。 std::ffi提供了一些工具去转换更复杂的类型,比如Strings,将&str和String映射成更容易和安全处理的C类型。 std::os::raw处理底层的基本类型,这些类型可以被编译器隐式地转换,因为Rust和C之间的内存布局足够相似或相同[10]。 Rust 是一种现代系统编程语言,可用于网络应用程序和裸机嵌入式系统。不过Rust的生态和函数库资源等比较有限,而和C之间的互通性可以让Rust更加便捷的应用到现有的软件中,更快的投入使用。 因此,我们将长期生活在 Rust 和 C 语言的混合环境中。尽管 Rust 声称内存安全(这一点已经得到证实),但是Rust 和 C 代码的结合可能会导致安全的 Rust 生成的程序被不安全的 C 实现所违反的情况。为了确保 Rust 的安全性,有必要在 C 和 Rust 之间找到一个合理的分界点。 尽管如此,事实证明 Rust 是在嵌入式系统中替代 C 和 C++ 的合适候选语言,尤其是在新代码开发方面。除内存安全外,Rust 语言的其他方面,如强大的类型系统和错误处理,也为 Rust 带来了卓越的可读性和可维护性。这提高了防错能力,从而在不增加开发阶段额外成本的情况下实现更安全的代码。
英飞凌产品支持Embedded Rust 软件安全对汽车市场至关重要,Rust 编程语言内置内存安全软件开发支持,是设计关键任务汽车软件的重要推动力。英飞凌科技公司为在嵌入式领域创建 Rust 生态系统迈出了第一步。首先推出的是市场领先的 AURIX™ TC3xx 和 TRAVEO™ T2G 汽车 MCU。TRAVEO™ 使用官方 Rust 工具链和 Arm Cortex-M 目标编译器,而英飞凌的工具合作伙伴 HighTec EDV-Systeme 则为 AURIX™ 开发了专用 Rust 编译器。 AURIX™ TC3xx 和 TRAVEO™ T2G 微控制器产品系列为功能安全和网络安全提供了广泛的集成硬件功能。对 Rust 的支持是对这些硬件功能在软件方面的补充。英飞凌为 AURIX™ 和 TRAVEO™ 提供了外设访问板条 (PAC),以实现对微控制器外设的本地访问。 HighTec Rust 编译器专为 AURIX™ TC3xx 和 TC4x 微控制器量身定制,利用先进的开源 LLVM 技术,为具有安全、可靠、高性能和快速部署要求的应用提供全套 Rust 语言特性,包括内存安全、并发性和互操作性。 总结 在英飞凌的支持下, Rust 在嵌入式系统中的应用将变得更加广泛,在与 Rust FOSS 社区合作的同时,规范 Rust 在行业中的使用。最后,Rust 的日益普及令人印象深刻,而英飞凌的嵌入式 Rust 生态系统无疑将帮助 Rust 在业界得到更广泛的应用。我们将进一步挖掘这一创新语言的潜力,并见证嵌入式 Rust 生态系统的发展。
|