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