可变的全局状态

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

我们应该遵循什么规则?

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

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

借用检查器

这些规则最后两个听起来与借用检查器在做的事情很像!

思考一下,我们是否可以传递这些外设的所有权,或者提供对它们的可变或者不可变的引用?

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