内容整理自 robyoung (Rob Young) 的文章:First steps with Embedded Rust: Selecting a board
有这么多令人眼花缭乱的微控制器和项目,对于嵌入式经验很少的人来说应该从哪里开始?
我们在开发板中想要什么?
我们需要什么架构?
拥有最完整库、最详尽指南和最大社区的架构是 ARM Cortex-M。ARM Cortex-M 是面向微控制器应用的低功耗、低成本处理器。查看 crates.io 上的下载量虽说不是一个完美的指标,但可以让我们了解规模上的差异。在过去的 90 天内,cortex-m 的下载量超过 250k。RISC-V、AVR 或 Xtensa 最多有 3k 次下载,cortex-a 有大约 18k 次下载。ARM Cortex-M 独树一帜。
我们需要什么芯片?
因此,我们将使用 ARM Cortex-M。这缩小了搜索范围,但仍有很多选择。如果我们查看 cortex-m crate 的依赖项,我们会看到有两组芯片比其他任何一组都使用得更多;STM32 系列芯片和 nRF5 系列,这是我们要重点搜索的地方。
板载调试器?
在主机上运行程序时,可以在 shell 中运行它并查看打印输出。这在嵌入式目标上更加困难,调试器填补了这一空白。除了允许单步调试、断点调试外,它还允许将程序加载到设备上并轻松查看输出。不过有一个问题,它通常是连接到主机然后连接到目标设备的单独设备。第一次开始时,这是一笔不可忽视的费用,也是必须正确设置的另一件事。幸运的是,有些设备带有内置调试器,将它们直接插入主机并在瞬间探测运行的代码(通常需要在主机上进行一些设置才能使调试器正常工作,ferrous 有一个很好的设置指南)。
结论
以下这些板都有很棒的 HAL 和 BSP crate、活跃友好的社区和板载调试器。
密切关注:
部分内容略有轻微调整,更多可阅读原文:Rob Young | digital
一个机器学习套件,使用方法如下:
# 训练
$ tangram train --file heart_disease.csv --target diagnosis --output heart_disease.tangram
推理支持多种语言:Elixir, Go, JavaScript, Python, Ruby 和 Rust,以 Rust 为例:
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,生产中使用需要做好性能测试。
GitHub:tangramdotdev/tangram: Tangram makes it easy for programmers to train, deploy, and monitor machine learning models.
文档:Tangram
在本地执行:
$ make run-release ARCH=x86_64
可以根据自己的情况调整 Makefile 第一行 Bash 的配置。执行后如果有安装 QEMU 的话会自动加载:
每个组件都建立在窗口管理器之上,而不是像大多数操作系统那样建立在终端之上。
GitHub:carterisonline/lateral: A clean, custom-built modular kernel ready to boot on x86_64.
就是把 json 或 csv 显示成表格,看起来很不错:
$ 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|
Mac 用户 brew 安装:
$ brew install uzimaru0000/tap/tv
GitHub:uzimaru0000/tv: CLI tool for displaying table
界面长这样:
是很好的学习资料。在这里玩儿:Minesweeper
GitHub:KarthikNedunchezhiyan/minesweeper: Minesweeper game developed with Rust, WebAssembly (Wasm), and Canvas
复制后翻译,使用 DeepL 的 API,不过目前只有 Local 版本好用:
当然,也可以使用 Eudic(欧路词典)。
GitHub:zu1k/copy-translator: Copy Translator, using DeepL api
项目受 p5.Vector 启发,使用方法如下:
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;
GitHub:micouy/veccentric: Tiny 2D vector library. Inspired by p5.js's p5.Vector.
From 日报小组 长琴
社区学习交流平台订阅: