在嵌入式系统上运行 Rust 的九条规则

将 range-set-blaze 移植到 no_std 的实践经验教训 在嵌入式上运行的 Rust — 来源:https://openai.com/dall-e-2/。所有其他图片均来自作者。您想让您的 Rust 代码在任何地方运行吗 — 从大型服务器到网页、机器人甚至手表?在本系列三部分 [1、2、3] 的最后一篇文章中,我们将了解如何使用 Rust 在 no_std 的嵌入式设备上运行。将您的 Rust 项目移植到 no_std 环境允许您定位微控制器和深度嵌入式系统,为受限环境创建高效的软件。例如,我使用即将推出的 range-set-blaze 版本创建了一个在 Raspberry Pi Pico 上运行的 LED 动画序列器和合成器:https://medium.com/media/1f5f5a8b39fa169605c328751218865d/href在没有标准库的情况下运行 Rust 会带来独特的挑战。如果没有操作系统支持,文件 I/O、网络甚至动态内存分配等功能都无法使用。在本文中,我们将介绍克服这些限制的实用策略。将 Rust 移植到 no_std 需要谨慎的步骤和选择,错过任何步骤都可能导致失败。我们将通过遵循以下九条规则来简化该过程,我们将详细研究这些规则:确认您的项目在浏览器中与 WASM WASI 和 WASM 一起使用。使用目标 thumbv7m-none-eabi 和 cargo tree 来识别和修复与 no_std 不兼容的依赖项。将主(非测试)代码标记为 no_std 和 alloc。将 std:: 替换为 core:: 并分配

来源:走向数据科学

基于我在范围内燃烧的经验,一个数据结构项目,这是我建议的决定,一次是一个决定。为了避免渴望,我将以规则表示。

Range-set-blaze

规则1:确认您的项目与Wasm Wasi和Wasm在浏览器中使用。

将锈蚀码移植到嵌入式环境之前,请确保它在Wasm Wasi和Wasm中成功运行。这些环境暴露了与远离标准库有关的问题,并像嵌入式系统一样施加限制。通过尽早解决这些挑战,您将更接近在嵌入式设备上运行项目。

wasm wasi WASM在浏览器中
旁边:如果您不需要项目也可以在本地和/或WASM上运行,则可以跳过此步骤。但是,您可以找到以前文章中有用的一些步骤,例如,在32位环境中运行并了解条件汇编。
我们希望在其中运行代码作为逐步加强约束的维恩图的环境。

运行以下命令,以确认您的代码在浏览器中的WASM WASI和WASM中都起作用:

货物测试 - 目标WASM32-WASIP1CARGO测试-Target Wasm32 insm32 Inngnown Inngnown

如果测试失败或不运行,请重新查看本系列早期文章的步骤:Wasm Wasi和Wasm在浏览器中。

WASM WASI文章还提供了了解锈目标(规则2),条件汇编(规则4)和货物特征(规则6)的关键背景。

完成了这些先决条件后,下一步就是查看(以及是否)如何使我们的依赖项在嵌入式系统上工作。

规则2:使用目标thumbv7m-none-eabi和货物树来识别和修复与NO_STD不符的依赖关系。

thumbv7m-none-eabi 货运树 no_std

要检查您的依赖项是否与嵌入式环境兼容,请为嵌入式目标编译您的项目。我建议使用thumbv7m-None-eabi目标:

thumbv7m std vec 字符串 eabi 数字 use_std 第一篇文章 + foo