#avr #arduino #run-time #microcontrollers #micro-controller #nano #boards

nightly avr-oxide

为AVR微控制器提供的一个极其简单的Rust操作系统

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 硬件支持

Download history 4/week @ 2024-04-23 5/week @ 2024-05-21 138/week @ 2024-06-04 20/week @ 2024-06-11 12/week @ 2024-06-18 3/week @ 2024-06-25 3/week @ 2024-07-09

919每月下载量
用于 2 包

BSD-3-Clause

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