10个版本

0.4.2 2024年6月7日
0.4.1 2023年4月18日
0.4.0 2022年6月19日
0.3.1 2022年4月26日
0.0.6 2021年12月3日

过程宏 中排名第 1450

Download history 2/week @ 2024-04-19 6/week @ 2024-04-26 3/week @ 2024-05-03 8/week @ 2024-05-17 5/week @ 2024-05-24 149/week @ 2024-06-07 19/week @ 2024-06-14 10/week @ 2024-06-21 1/week @ 2024-06-28 4/week @ 2024-07-12 2/week @ 2024-07-19 71/week @ 2024-07-26 10/week @ 2024-08-02

每月下载量 87
3 个Crate中使用(通过 avr-oxide

BSD-3-Clause

28KB
472 代码行

AVR-Oxide

AVR微控制器的极简单Rust运行时。

有关更多信息和技术文档,请参阅AVRoxide网站。

为什么?

AVRoxide源于我使用Rust编程语言为Arduino Nano Every微控制器板开发时的挫败感。

Arduino Nano Every使用与Arduino系列其他板不同的AVR微控制器版本 - ATmega4809。虽然为各种Arduino板提供了HAL[^1]Crate,但没有一个与这个微控制器兼容,这真是太遗憾了——实际上这是一个超级棒的芯片,是传统Arduino板中使用的芯片的良好升级。因此,在Rust中支持它显然是件好事。

我们是如何到达这里的

当然,我首先尝试的是适配一些现有的HAL以与Nano Every一起工作。但结果比我预期的要复杂一些,而且无论如何,我发现我对那些HAL有一些不喜欢的地方。这绝不是对那些HAL质量的问题——更多的是反映了我自己的Rust能力——但我发现我想要一些更简单、更易于理解的东西。

因此,我产生了自己构建自己的硬件抽象层(HAL)的想法。但是,我还想稍微提高一下这个管道的层级 - 不仅是要抽象出硬件,还要为诸如标准事件循环等事物制定一些标准模式,以便隐藏中断处理等细节,让应用开发者不必关心。

于是,AVRoxide应运而生!AVR微控制器的Rust运行时。

支持的微控制器

  • ATmega 4809(用于Arduino Nano Every)
  • ATmega 328P(用于Arduino Uno、Arduino Pro Mini和Arduino Nano)

注意,'328P的支持目前处于一个非常非常初级的阶段,只有基本的端口引脚和串行USARTs在工作。这块芯片还带来了一组新的Rust/LLVM代码生成错误和挑战,我还没有找出如何处理它们。

文档

入门指南位于 https://avroxi.de/categories/gettingstarted/

状态

这是一个正在进行中的项目

目前它已经可以使用,但有一些关于Rust在AVR上一般准备情况的限制,并且可以用来构建简单的程序

目的是在适当的时候将其扩展到目前支持的设备集之外。

现在以及永远 - 自行承担风险 :-).

存在海森堡虫 尤其涉及多线程。由于我已经达到了追踪它们的极限,目前我将关注其他事情,并希望在处理其他事情时找到解决方案。因此,真的真的,现在不要用它来做任何关键的事情 - 把它当作一个冒险游戏吧 :-).

Rust工具链

AVRoxide使用AVR的nightly Rust工具链构建。自2022年5月10日起,您可以使用常规的nightly工具链 - 感谢Patryk27使它工作!

更新,2024年:最近对nightly的一些更改导致了一些问题。但相对较新的2024-05-01工具链工作正常,所以我目前正在使用它。

包含已知工作版本的工具链的Docker镜像也可在Docker Hub上找到。这是我在CICD中用于测试构建的版本;如果您想验证,可以使用以下命令拉取相同的版本:

docker pull snowgoons/avr-rustbuilder:nightly-2024-06-06

注意,尽管镜像的日期较晚,但此镜像也预先安装了工作的nightly-2024-05-01工具链和源。

[^1]: 硬件抽象层

依赖关系

约2MB
约43K SLoC