2个版本 (1个稳定版)

使用旧的Rust 2015

1.0.0 2015年12月28日
0.0.1 2015年12月15日

#14 in #volatile

10KB
254

构建状态 irc 待处理的故事 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 需要知道并有权访问以下内容

  1. 指定机器的目标规范(由编译器使用)
  2. 一个特性,告诉代码正在针对哪个平台。这些特性以 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