专栏首页Rust语言学习交流【Rust 日报】2021-08-29 Embedded Rust 第一步:选择一块板子

【Rust 日报】2021-08-29 Embedded Rust 第一步:选择一块板子

Embedded Rust 第一步:选择一块板子

内容整理自 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 独树一帜。

  • 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。

我们需要什么芯片?

因此,我们将使用 ARM Cortex-M。这缩小了搜索范围,但仍有很多选择。如果我们查看 cortex-m crate 的依赖项,我们会看到有两组芯片比其他任何一组都使用得更多;STM32 系列芯片和 nRF5 系列,这是我们要重点搜索的地方。

  • 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 社区中围绕它进行了大量活动,所以一定要密切关注,但它可能不适合作为入门第一块板。

板载调试器?

在主机上运行程序时,可以在 shell 中运行它并查看打印输出。这在嵌入式目标上更加困难,调试器填补了这一空白。除了允许单步调试、断点调试外,它还允许将程序加载到设备上并轻松查看输出。不过有一个问题,它通常是连接到主机然后连接到目标设备的单独设备。第一次开始时,这是一笔不可忽视的费用,也是必须正确设置的另一件事。幸运的是,有些设备带有内置调试器,将它们直接插入主机并在瞬间探测运行的代码(通常需要在主机上进行一些设置才能使调试器正常工作,ferrous 有一个很好的设置指南)。

结论

以下这些板都有很棒的 HAL 和 BSP crate、活跃友好的社区和板载调试器。

  • 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。

部分内容略有轻微调整,更多可阅读原文:Rob Young | digital

Tangram:训练、部署和监控机器学习模型

一个机器学习套件,使用方法如下:

# 训练
$ 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

lateral:一个在 x86_64 上启动的模块化内核

在本地执行:

$ make run-release ARCH=x86_64

可以根据自己的情况调整 Makefile 第一行 Bash 的配置。执行后如果有安装 QEMU 的话会自动加载:

每个组件都建立在窗口管理器之上,而不是像大多数操作系统那样建立在终端之上。

GitHub:carterisonline/lateral: A clean, custom-built modular kernel ready to boot on x86_64.

tv:显示表格的 cli 工具

就是把 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:使用 Rust,WebAssembly 和 Canvas 的扫雷游戏

界面长这样:

是很好的学习资料。在这里玩儿:Minesweeper

GitHub:KarthikNedunchezhiyan/minesweeper: Minesweeper game developed with Rust, WebAssembly (Wasm), and Canvas

copy-translator:划词翻译

复制后翻译,使用 DeepL 的 API,不过目前只有 Local 版本好用:

当然,也可以使用 Eudic(欧路词典)。

GitHub:zu1k/copy-translator: Copy Translator, using DeepL api

veccentric:小巧的 2-D 向量 Library

项目受 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 日报小组 长琴

社区学习交流平台订阅:

  • Rustcc 论坛:支持 rss
  • 微信公众号:Rust 语言中文社区

本文分享自微信公众号 - Rust语言学习交流(rust-china),作者:太子长琴

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-08-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【Rust日报】2021-08-14 reqwest 增加中间件支持

    TrueLayer 团队用支持中间件的客户端reqwest-middleware包装 reqwest,并暴露相同的简单 API,在满足弹性和可观察性要求下,使其...

    MikeLoveRust
  • 【Rust日报】2020-08-24 理解 Rust 的切片

    在迁移一些 C/C++ 代码到 Rust 过程中, 你是否也对切片的所有权如何从 Rust 中传递给 C 感到困惑 ? 亦或是对切片的内存布局感到困惑, 从而担...

    MikeLoveRust
  • 【Rust 日报】2021-06-03 RustSBI组织宣布成立

    RustSBI是RISC-V平台下的引导程序实现,它完全由Rust编写,并已经被录入RISC-V SBI国际标准。6月3日,RustSBI已经在GitHub上成...

    MikeLoveRust
  • 【Rust日报】2021-02-17 - Rust 圆桌年话

    Rust 语言作为一门新兴语言,从2015年发布以来,收获了不少关注度。Rust 目前也逐渐进入了成熟的阶段。并且在2021年02月08号,Rust 基金会也宣...

    MikeLoveRust
  • Rust语言杀疯了!前有谷歌高薪争夺 Rust 人才,Facebook再官宣加入Rust基金会

    近日,Facebook 宣布以最高级别 (Platinum Member) 的会员身份加入 Rust 基金会,与其他基金会成员一起负责 Rust 开源生态以及社...

    新智元
  • 官宣 Rust 2021 Edition 计划 一睹为快

    原文: The Plan for the Rust 2021 Edition[1]

    张汉东
  • 【Rust日报】2021-09-05 perseus:完全支持 SSR 和 SSG 的 Rust 高端前端开发框架

    GitHub:orhun/rust-tui-template: A template for bootstrapping a Rust TUI applicat...

    MikeLoveRust
  • 5月编程排行榜出现重大变动,让人猝不及防!

    和4 月相比来看的话,本月榜单的前十里最大的变动就是Python和Java的排名啦!曾经被 Java、C、C++霸占前三名的局面已经看不到了。去年5月Java ...

    老九君
  • TIOBE 新榜单:Python 超越 Java 重回第二,Rust 崛起

    TIOBE 官方最新发布了 5 月的编程语言榜单,不妨一起来看一下本月榜单中又有哪些最新的变化呢?

    AI科技大本营
  • 「Rust语言」最全的Rust初学者的完全免费资源

    下面的图表来自评测游戏,显示了Rust与其他编程语言相比是多么的快。你可以在这里找到Go语言的对比。

    首席架构师智库
  • 拓展 | Rust语言在嵌入式领域的应用

    Rust语言是二十一世纪的语言新星。Rust被人广泛承认的一点,就是因为它能运行在多样的目标上,从桌面和服务器设备,到资源有限的嵌入式设备。 我们可以用适合来...

    MikeLoveRust
  • 【Rust 日报】2021-7-15 Zenoh 性能提升的故事| 漫游在 Rust 异步仙境

    这是 Facebook for Develpers 网站出的Rust Nibbles系列文章,介绍 facebook 开源的各种 Rust 库。

    MikeLoveRust
  • 【Rust日报】 2019-08-07:「讨论」Rust的安全性

    今天的讨论有两个主题,第一个是关于在Safe Rust中绕过借用检查的一个问题,第二个是关于Libra区块链依赖Rust单一语言而引起的安全性讨论。

    MikeLoveRust
  • Rust也出2077? 最受欢迎的编程语言再度更新!

    Rust语言是一种高效、可靠的通用高级语言,同时兼顾了开发效率和执行效率。Rust除了能够胜任性能敏感的任务以外,也在内存和线程安全方面有着极高的可靠性。

    新智元
  • 【Rust 日报】2021-09-26 RustConf 2021 项目精选

    “自引用” 类型是一种对自身引用的类型;异步 Features 是当今 Rust 中最常见的自引用类型。但是,它们不能在不使引用无效的情况下移动,因此常被固定在...

    MikeLoveRust
  • 【Rust日报】2020-01-02 The Embedded Working Group Newsletter - 22

    这是 Rust Embedded WG 的第 22 期通讯,我们重点介绍新的进展,为出色的项目加油,感谢社区并宣传需要帮助的项目!(如果您想在下一期通讯中提及,...

    MikeLoveRust
  • 【Rust日报】2020-09-04 Rust 2021 Roadmap 计划

    Rust的2021 Edition提上日程了,官方发布了一篇博客提到未来几周会同步进行两项重要的任务:

    MikeLoveRust
  • CNCF CTO对2021云原生最新趋势解读

    近日,CNCF发布了2020年云原生领域所有工作的年度总结[1],在疫情流行的形势下,我们仍然度过了坚实的一年,希望读者朋友们阅读该报告。

    CNCF
  • 【Rust日报】2021-02-05 Rust 错误处理工作组计划将Error trait迁移至core模块

    Rust 语言团队2月3号第一次召开了规划会议,并总结了会议纪要。从今以后,语言团队计划每个月的第一个星期三举行这样的会议。

    MikeLoveRust

扫码关注云+社区

领取腾讯云代金券