可变全局状态

不幸的是,硬件基本上就是可变全局状态,这对于 Rust 开发者来说可能会非常令人恐惧。硬件独立于我们编写的代码结构而存在,并且可以随时被现实世界修改。

我们应该遵循什么规则?

我们如何可靠地与这些外围设备交互?

  1. 始终使用 volatile 方法来读取或写入外围设备内存,因为它随时可能发生变化
  2. 在软件中,我们应该能够共享任意数量的对这些外围设备的只读访问
  3. 如果某些软件应该对某个外围设备具有读写权限,则它应该持有对该外围设备的唯一引用

借用检查器

最后两条规则听起来非常类似于借用检查器已经做的事情!

想象一下,如果我们能够传递这些外围设备的所有权,或者为它们提供不可变或可变的引用会怎么样?

好吧,我们可以这样做,但对于借用检查器来说,我们需要每个外围设备都只有一个实例,以便 Rust 能够正确处理。幸运的是,在硬件中,任何给定的外围设备都只有一个实例,但是我们如何在代码结构中公开它呢?