可变的全局状态

不幸地是,硬件本质上是个可变的全局状态,Rust开发者可能对此感到很害怕。因为硬件独立于我们所写的代码的结构,能被真实世界在任何时候改变。

我们应该遵循什么规则?

我们如何才能做到可靠地与这些外设交互?

  1. 总是使用 volatile 方法去读或者写外设存储器。因为它可以随时改变。
  2. 在软件中,我们应该能共享任何数量的关于这些外设的只读访问
  3. 如果某些软件对一个外设应该可以读写访问,它应该保有对那个外设的唯一引用。

借用检查器

这些规则最后两个听起来与借用检查器已经做的事相似。

思考一下,我们是否可以分发这些外设的所有权,或者引用它们?

我们当然可以,但是对于借用检查器来说,每个外设我们都只需要一个实例,因此Rust可以正确地处理这个实例。幸运的是,在硬件中,任何给定的外设,只有一个实例,但是我们该如何将它暴露在我们代码的结构中呢?