15个版本
0.4.2 | 2024年6月7日 |
---|---|
0.4.1 | 2023年4月18日 |
0.4.0 | 2022年6月19日 |
0.2.2 | 2022年1月16日 |
0.0.5 | 2021年9月22日 |
#125 in 硬件支持
919每月下载量
用于 2 包
580KB
11K SLoC
包含 (ELF 可执行文件/库, 33KB) crtatmega4809.o, (静态库, 29KB) libatmega4809.a
AVR-Oxide
为AVR微控制器提供的一个极其简单的Rust运行时。
有关更多信息和使用说明,请参阅AVRoxide网站。
为什么?
AVRoxide是在我尝试使用Rust编程语言为Arduino Nano Every微控制器板开发时产生的挫折。
Arduino Nano Every使用的是与其他Arduino系列板不同的AVR微控制器版本 - ATmega4809。虽然有一些HAL[^1]包适用于各种Arduino板,但它们都不适用于这款微控制器,这很遗憾 - 实际上这是一款非常好的芯片,并且是传统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的支持目前处于非常非常早期阶段,只有基本的端口引脚和串行USART工作。这颗芯片还带来了一组新的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
~44K SLoC