Embedded Rust 第一步:选择一块板子
-
良好的架构支持 -
良好的芯片支持 -
活跃的社区 -
内置调试器
-
AVR:AVR 是用于嵌入式系统的 8 位微控制器系列。在 Rust 生态系统中,它们并没有得到很好的支持。直到最近,还需要使用 rustc 的一个分支来构建 AVR。现在有几个不同的选择,awesome-avr-rust 是一个很好的起点。 -
ARM Cortex-A:更强大的多核 ARM 处理器,专为运行更大的东西而设计。通常会在它们上运行完整的操作系统。例如这是大多数智能手机和掌上游戏机中使用的架构。查看 cortex-a - crates.io: Rust Package Registry 了解更多。 -
RISC-V:似乎是机器架构的新热点,它是一种免费且开放的指令集架构 (ISA)。它也从一开始就被设计成模块化的,这意味着芯片设计人员可以创建各种各样的专用芯片,虽然目前开发板的范围很小。有一个活跃的 Rust RISC-V 社区,SiFive 或 www.riscv.org 都是不错的起点,Rust 方面,可以查看 riscv crate。 -
Xtensa:最受欢迎的主板组是来自 Espressif 的 ESP32 系列芯片。它们是小型、廉价、支持 WiFi 的电路板。需要注意的是,并非所有 ESP32 开发板都使用 Xtensa 芯片,新的 ESP32-C3 是基于 RISC-V 的。在 Xtensa 芯片上使用 Rust 的最大障碍可能是 llvm 不支持它,因此需要构建 Rust 的 fork:esp-rs/rust。
-
STM32:STM32 系列芯片可能是应用最广泛的嵌入式 Rust ARM Cortex-M 芯片。两种最受欢迎的 STM32 板是 Blue Pill 和 Black Pill。主要的缺点是没有板载调试器。如果想要带有调试器的基于 STM32 的电路板,那么获得 STMicroelectronics 官方套件是一个不错的选择(STM32F3 或 STM32F4 是不错的选择)。Rust Embedded Discovery 书的原始版本是针对 STM32F3 板编写的,因此有非常高质量的初学者文档,可以从那里开始。 -
nRF5:用于嵌入式 Rust 的第二个最广泛使用的 ARM Cortex-M 芯片系列是 Nordic Semiconductor 的 nRF5 系列。官方开发套件 (DK) 是很棒的入门板。Ferrous Systems 的 Knurling-rs 会议使用 nRF52840 开发套件。Knurling 课程质量非常高,手把手指导,通过有趣好玩的项目教授嵌入 Rust,是使用 Rust 进行嵌入式开发的最佳切入点。另一个很棒的基于 nRF 的开发板是 BBC micro:bit。它配备了板载调试器和一系列有趣的板载外围设备,如板上的 LED 显示屏、按钮和传感器。BBC micro:bit 被设计为一个教育平台,因此硬件在他们的开发者社区中以非常适合初学者的方式进行记录,并且互联网上有大量项目创意。 -
RP2040:RP2040 于 2020 年底发布,是 Raspberry Pi 基金会首次尝试设计自己的芯片。由于如此新,Rust 对它的支持仍在开发中。与 BBC micro:bit 一样,RP2040 旨在成为一个教育平台,因此硬件文档是一流的,并且有大量初学者友好的代码示例和其他编程语言的库(没有多少适合初学者的嵌入式 Rust 文档)。这是一个非常令人兴奋的平台,并且在 Embedded Rust 社区中围绕它进行了大量活动,所以一定要密切关注,但它可能不适合作为入门第一块板。
-
BBC micro:bit(约 13 英镑):它是新版 Rust Embedded Discovery 书中使用的板。 -
nRF52840 开发套件(约 35 英镑);它是 Ferrous Systems 在 Kunrling 会议和培训中使用的板。 -
STM32F3 探索套件(约 14 英镑);它是 Rust Embedded Discovery 书的第一版中使用的板。
-
Raspberry Pi Pico(约 6 英镑,带预焊引脚);ARM Cortex-M 但没有内置调试器,HAL 仍在开发中。不过目前有很多活动,进展很快。 -
HiFive1 Rev B(约 50 英镑);RISC-V 是新的热点。Rust 中似乎有很多围绕它的活动,但它目前还没有 ARM Cortex-M 的支持。其他需要关注的开发板是 Logan Nano 和 ESP32-C3。
Tangram:训练、部署和监控机器学习模型
# 训练
$ tangram train --file heart_disease.csv --target diagnosis --output heart_disease.tangram
let model: tangram::Model = tangram::Model::from_path("heart_disease.tangram", None).unwrap();
let input = tangram::predict_input! {
"age": 63.0,
"gender": "male",
// ...
};
let output = model.predict_one(input, None);
# { className: 'Negative', probability: 0.9381780624389648 }
项目理论上可以用在简单机器学习场景下,尤其是那些还没有支持机器学习的语言,不过推理并没有 Benchmark,生产中使用需要做好性能测试。
lateral:一个在 x86_64 上启动的模块化内核
$ make run-release ARCH=x86_64
tv:显示表格的 cli 工具
$ cat test.json
[
{
"name": "test",
"age": 10,
"lang": "ja"
},
{
"name": "uzimaru",
"age": 23,
"lang": "ja"
},
{
"name": "hogehoge",
"age": 21,
"lang": "en"
},
{
"name": "hugehuge",
"age": 32,
"lang": "en"
}
]
$ tv test.json
|age|lang| name|
|---|----|--------|
| 10| ja| test|
| 23| ja| uzimaru|
| 21| en|hogehoge|
| 32| en|hugehuge|
$ cat test.csv
name,age,lang
test,10,ja
uzimaru,23,ja
hogehoge,21,en
hugehuge,32,en
$ tv test.csv
|age|lang| name|
|---|----|--------|
| 10| ja| test|
| 23| ja| uzimaru|
| 21| en|hogehoge|
| 32| en|hugehuge|
$ brew install uzimaru0000/tap/tv
minesweeper:使用 Rust,WebAssembly 和 Canvas 的扫雷游戏
是很好的学习资料。在这里玩儿:Minesweeper
copy-translator:划词翻译
veccentric:小巧的 2-D 向量 Library
use veccentric::Vecc;
let a = Vecc::new(3_i32, 4);
let b = a * 5;
let c = Vecc::new(-10, -8);
let d = b - c;
let e = -d;
From 日报小组 长琴
-
Rustcc 论坛:支持 rss -
微信公众号:Rust 语言中文社区
文章评论