成功案例

缘起此生:英飞凌车规MCU全系支撑Rust 言语开发

作者: [db:作者]   点击次数:    发布时间: 2025-01-15 08:35

弁言本文援用地点:2023年3月7日,发布其32位微把持器AURIX™系列、TRAVEO™T2G系列跟PSoC™MCU 系列支撑 Rust言语,英飞凌成为寰球当先正式支撑 Rust 的半导体公司。那么什么是 Rust,为什么要存眷它?在本系列博文中,咱们将探究 Rust 言语及其在嵌入式体系开辟中的潜力,以及英飞凌为创立嵌入式 Rust 生态体系所做的尽力。英飞凌  IsaacRUST 出生配景跟着软件功效的日趋强盛,软件开辟任务量随之剧增,软件开辟团队也一直实验改良软件的开辟方式,旨在保障软件功效,品质的情形下,增加本钱,放慢开辟速率。要实现上述目的,要害在于任务量——在软件开辟中尽可能增加任务量。软件开辟相干的任务量包含功效需要界说,功效需要的实现跟测试,非功效需要,以及修复开辟进程中引入的过错的任务量。站在软件开辟者的角度,在实现软件完全功效的情形下,怎样增加开辟的总任务量,独一可能增加的局部就是用于修改过错的任务量。对软件开辟而言,一旦发明过错,就必需加以修改,以保障软件产物品质。因而,要在不影响产物品质的条件下增加任务量,独一的处理措施就是避免开辟进程中引入软件过错。在已知的软件过错中,内存保险是软件行业中最罕见的过错种别 [1][2] 。但是,嵌入式软件行业的尺度言语 C 跟 C++ 长短内存保险编程言语,这象征着嵌入式体系很轻易呈现这类过错。增加这类过错的方式之一是在软件测试、检察跟验证方面投入人力物力,而另一种思绪是用内存保险言语代替现有言语 [3] 。固然很多内存保险言语(如 Python、Java)已在软件行业失掉普遍利用,但它们并不合适嵌入式体系。这是由于嵌入式体系对占用空间、客栈应用跟机能有严厉的限度(这是C跟C++的上风)。Rust就是在如许的配景下出生的,它同时实现了高效性跟内存保险。Rust 是什么Rust言语在2006年作为 Mozilla 员工 Graydon Hoare 的私家名目呈现,而 Mozilla 于 2009 年开端援助这个名目。第一个有版本号的 Rust 编译器于2012 年 1 月宣布。Rust 1.0 是第一个稳固版本,于 2015年5月15日宣布 [4] 。Figure 1. Rust LogoRust是一种在科技界年夜受欢送的言语,Rust曾经持续七年(2016,2017,2018,2019,2020, 2021, 2022)在Stack Overflow开辟者考察的“最受爱好编程言语”评比名目中折取桂冠 [5] 。微软用Rust重写它的一些中心windowns库,在 Android 13 中,21% 的新原生代码应用了 Rust,别的,除 C 言语外,Rust 是独一一种支撑编写 Linux 内核组件的言语,并被普遍用于后端软件、基本设备跟微效劳。Figure 2. rust-gentle-intro [6]Rust是一种体系编程言语,旨在成为无渣滓接纳的内存保险言语。Rust应用了包括特定例则的“全部权”机制来治理内存,容许编译器在编译进程中履行检讨任务,而不会发生任何的运转时开支。Rust中的每一个值都有一个对应的变量作为它的全部者;在统一时光内,值有且仅有一个全部者;当全部者分开本人的感化域时,它持有的值就会被开释失落。Rust应用“借用规矩”实现对值停止可变跟弗成变援用:一个值能够有一个弗成变援用或多个可变援用,但不克不及同时有两个援用。编译器中一个名为“借用检讨器”的特定局部会对此停止检讨。Rust中的性命周期规矩:Rust的每个援用都有本人的性命周期,它对应着援用坚持无效性的感化域。性命周期最重要的目的在于防止悬垂援用,进而防止顺序援用到非预期的数据。 [7][8]Cargo 是 Rust 的软件担保理器 [9] ,软件包被称为板条箱(Crate),cargo 有一个下令:cargo build,它能主动处理名目依附关联。别的,应用 cargo test 下令能触发单位测试,应用 cargo doc 下令还能天生文档网页。cargo 的文档列出了 30 多条差别的下令,用于支撑软件包处置、构建文档跟测试。别的,cargo 还可用于装置其余 Rust 二进制文件,如东西 svd2rust。嵌入式体系中的 RustFigure 3. Embedded Rust ArchitectureEmbedded 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 编译器。Figure 4. AURIX™ and TRAVEO™ T2GAURIX™ TC3xx 跟 TRAVEO™ T2G 微把持器产物系列为功效保险跟收集保险供给了普遍的集成硬件功效。对 Rust 的支撑是对这些硬件功效在软件方面的弥补。英飞凌为 AURIX™ 跟 TRAVEO™ 供给了外设拜访板条 (PAC),以实现对微把持器外设的当地拜访。HighTec Rust 编译器专为 AURIX™ TC3xx 跟 TC4x 微把持度量身定制,应用进步的开源 LLVM 技巧,为存在保险、牢靠、高机能跟疾速安排请求的利用供给全套 Rust 言语特征,包含内存保险、并发性跟互操纵性。总结在英飞凌的支撑下, Rust 在嵌入式体系中的利用将变得愈加普遍,在与 Rust FOSS 社区配合的同时,标准 Rust 外行业中的应用。最后,Rust 的日益遍及令人印象深入,而英飞凌的嵌入式 Rust 生态体系无疑将辅助 Rust 在业界失掉更普遍的利用。咱们将进一步发掘这一翻新言语的潜力,并见证嵌入式 Rust 生态体系的开展。以后,咱们将推出更多博文探究 Rust,分享更多Rust for MCU 的出色信息。REFERENCES[1]G. Thomas, “A proactive approach to more secure code”, available at https://msrc.microsoft.com/blog/2019/07/a-proactive-approach-to-more-secure-code/, accessed on 26.02.2023 13:38 CST[2]J. Blessing, M. A. Specter, D. J. Weitzner, “You Really Shouldn t Roll Your Own Crypto: An Empirical Study of Vulnerabilities in Cryptographic Libraries”, arXiv, 2021[3]Tiago Manczak, “Evaluation of Rust for Embedded Security Systems” Embedded World 2023[4]https://blog.csdn.net/weixin_50964512/article/details/130138973 accessed on 26.01.2024 14:20 CST.[5]https://survey.stackoverflow.co/2022/#section-most-loved-dreaded-and-wanted-programming-scripting-and-markup-languages accessed on 26.01.2024 14:20 CST.[6]https://stevedonovan.github.io/rust-gentle-intro/ accessed on 26.01.2024 14:20 CST.[7]https://doc.rust-lang.org/book/ch04-00-understanding-ownership.html accessed on 26.01.2024 14:20 CST.[8]https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html accessed on 28.01.2024 15:20 CST.[9]https://doc.rust-lang.org/cargo/index.html accessed on 26.01.2024 14:20 CST.[10]https://xxchang.github.io/book/interoperability/index.html 29.01.2024 15:20 CST.

成功案例

森林舞会

QQ:88889999

电话:020-66889888

传真:020-66889777

邮箱:[email protected]

地址: 广东省广州市番禺经济开发区58号