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
每月下载量 87
在 3 个Crate中使用(通过 avr-oxide)
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