2个版本 (1个稳定版)
使用旧的Rust 2015
1.0.0 | 2015年12月28日 |
---|---|
0.0.1 | 2015年12月15日 |
#14 in #volatile
10KB
254 行
Zinc,Rust的裸金属堆栈
维护更新
Zinc不再被积极开发和维护,目前可以考虑它更像是一个学术实验。现在有一个完整的Rust嵌入式工作组,许多项目使用了Zinc中的想法,以使Rust的嵌入式开发尽可能简单。建议从tock开始。
关于zinc.rs
Zinc是一个尝试编写与CMSIS或mbed在功能上相似的ARM堆栈的实验性尝试,但它将展示Rust在嵌入式开发中的最佳安全特性。
目前,Zinc基本上没有汇编,完全没有C。Zinc的一个目标是如何在资源使用率足够低的情况下,以安全的方式用Rust编写通常的RTOS堆栈,以便与C/C++代码相当。
有用链接
主要功能
Zinc在Rust代码安全方面提供安全的代码;直接访问硬件是不安全的,但如果你想也可以这样做。
除了软件安全外,Zinc还通过平台树规范提供硬件安全;你可以在简单的键值DSL中直接在代码中定义硬件配置,编译器会验证所有硬件是否配置正确;这也允许将代码优化到比传统RTOS更广泛的程度。
还有一个努力,从ARM CMSIS SVD(如cmsis-svd项目聚集的)生成新平台的平台树规范。
支持的硬件
目前为以下处理器系列提供一定程度的支持。目前并非所有处理器都支持所有外设。
- NXP lpc11xx
- NXP lpc17xx
- Freescale k20
- ST STM32f4
- ST STM32l1
未来将提供更好的故事,这将使定义更多处理器系列、处理器和基于这些处理器的板子变得更加容易。
许可证
Zinc 采用 Apache-2.0 许可证分发,更多详情请参阅 LICENSE。
用法
环境设置
目前,Zinc 使用 Rust 语言的不稳定特性。因此,我们建议使用 Rust 的最新夜间版本进行开发。随着语言特性的稳定,Zinc 的目标是最终能够针对编译器的稳定版本进行编译。可以使用 rustup.rs 在单台机器上管理 rust 的多个版本。
目前支持的 Rust 版本是 nightly-2016-09-17。要使用 rustup 安装它,请使用以下命令
rustup install nightly-2016-09-17
rustup override set nightly-2016-09-17
除了 rust 本身之外,还需要安装 ARM 的 GCC 跨工具链。尽管使用了 LLVM 进行大多数编译,但目前仍然使用 GCC 链接器。对于大多数人来说,GCCM ARM Embedded 工具链 工作得很好。
在 Zinc 内部构建示例
在 Zinc 源代码中提供了几个示例。Zinc 使用 Xargo(Cargo 的裸金属变体)作为其构建系统,但仍需要向构建系统提供一些信息,以便它为您的目标正确编译。
具体来说,xargo 需要知道并有权访问以下内容
- 指定机器的目标规范(由编译器使用)
- 一个特性,告诉代码正在针对哪个平台。这些特性以
mcu_<platform>
的形式定义。
假设我们正在针对 k20
平台。在这种情况下,我可以通过以下方式构建 blink_k20
示例程序。有关平台到目标的映射,请参阅 build-jenkins.sh。
$ cd examples/blink_k20
$ ln -s ../../thumbv7em-none-eabi.json
$ xargo build --target=thumbv7em-none-eabi --features mcu_k20 --release
$ file target/thumbv7em-none-eabi/release/blink
target/thumbv7em-none-eabi/release/blink: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, not stripped
如果您收到链接错误,可能需要告诉 Xargo 使用您的交叉编译器链接器。您可以通过向您的家目录或 Zinc 项目的根目录添加 .xargo/config
来完成此操作
[target.thumbv7em-none-eabi]
linker = "arm-none-eabi-gcc"
ar = "arm-none-eabi-ar"
在项目中使用 Zinc
由于 Zinc 使用 xargo 作为其构建系统,因此只需正确设置您的 Cargo.toml 即可从您的项目中使用 Zinc。
您可以在以下位置找到如何操作的示例: https://github.com/posborne/zinc-example-lpc1768
联系开发者
您可以在 irc.mozilla.org 的 #zinc(#zinc)找到我们。
lib.rs
:
带有可变设置器的单元格
依赖关系
32KB