可变全局状态
不幸的是,硬件基本上就是可变全局状态,这对 Rust 开发人员来说可能非常可怕。硬件独立于我们编写的代码结构而存在,并且可以随时被现实世界修改。
我们的规则应该是什么?
我们如何才能可靠地与这些外设交互?
- 始终使用 `volatile` 方法读取或写入外设内存,因为它可能随时发生变化
- 在软件中,我们应该能够共享对这些外设的任意数量的只读访问
- 如果某些软件应该对外设具有读写访问权限,则它应该持有对该外设的唯一引用
借用检查器
最后两条规则听起来非常像借用检查器已经做的事情!
想象一下,如果我们可以传递这些外设的所有权,或者提供对它们的不可变或可变引用?
好吧,我们可以,但对于借用检查器,我们需要为每个外设只有一个实例,这样 Rust 才能正确处理它。好吧,幸运的是,在硬件中,任何给定外设只有一个实例,但我们如何在代码结构中公开它呢?