Rust 嵌入式开发 STM32 & RISC-V
发布于 2020-04-03 11:07:06
本帖最后由 wuhanstudio 于 2020-4-3 11:58 编辑
更新地址:
[md]# Rust 嵌入式开发 STM32 & RISC-V
- Preface
- Introduction
- Rust on STM32F103
- Rust on RISC-V
- Issues
- Reference
## Preface
最近 Mozilla 的 Rust 和 Google 的 Golang 两门新语言非常受关注。
![](https://tse1-mm.cn.bing.net/th/id/OIP.g5TEj1R0X0CzTgvielr0YwHaE8?w=240&h=160&c=7&o=5&pid=1.7)
不过 Golang 除了 Docker 这个标志性的项目,在服务端配合 gRPC 也已经应用非常广泛了,可以说已经是相当很成熟了;然而相比之下 Rust 还是旁观的多,实际用的少,微软和 Facebook 也都只是宣称实验性地尝试用 Rust 实现一些新功能,毕竟 Facebook 也在研发自己的操作系统。
Rust 的官方主页标语就是 reliable and efficient,吉祥物也是硬壳的螃蟹,自然就有人想到把 Rust 应用到安全可靠的嵌入式。
![](https://tse3-mm.cn.bing.net/th/id/OIP.ls9e1iT_NALaCEavv77EOgHaE8?w=258&h=160&c=7&o=5&pid=1.7)
嵌入式的特点就在于指令集 (ISA) 特别多,如果一门语言想要应用到嵌入式,首先自然是得能编译出兼容不同指令集的程序。Rust 早期编译器是 rustc 提供代理 (proxy),将编译任务传递到后端实际的编译器来进行编译,这样就可以编译出不同指令集的程序。但是在 Rust 1.28 之后,终于拥抱 LLVM,Golang 和 Swift 也都是积极拥抱 LLVM(LLVM 势不可挡)。LLVM 特点就是在于提供抽象的 IR (intermediate representation),先将源码翻译为 LLVM IR,再由后端生成不同指令集的程序,效率高,还能兼容不同平台。
![](
)
所以在 Rust 积极拥抱 LLVM 之后,在嵌入式领域开发更加方便了,接下来就介绍一下如何在 STM32 (Cortex M3) 和 GD32 (RISC-V) 上用 Rust 开发。
## Prerequisites
首先自然是得搭建好 Rust 的开发环境,这在 Rust 的[主页](https://www.rust-lang.org/tools/install)上已经介绍得很详细了,安装也很简单。
不过值得注意的是,在 Windows 下安装 Rust 会提示需要安装 Visual Studio,其