可变的全局状态
不幸的是,硬件本质上是个可变的全局状态,Rust开发者可能会对此感到很害怕。因为硬件独立于我们所写的代码的结构,能被真实世界在任何时候改变。
我们应该遵循什么规则?
我们如何才能做到可靠地与这些外设交互?
- 总是使用
volatile
方法去读或者写外设存储器。因为它随时会改变。 - 在软件中,我们应该能共享任何数量的关于这些外设的只读访问
- 如果某个软件可以读写一个外设,它应该保有对那个外设的唯一引用。
借用检查器
这些规则最后两个听起来与借用检查器在做的事情很像!
思考一下,我们是否可以传递这些外设的所有权,或者提供对它们的可变或者不可变的引用?
我们当然可以,但是对于借用检查器来说,每个外设只有一个实例的话,Rust才可以正确地处理这件事。幸运的是,在硬件中,任何给定的外设,只有一个实例,但是我们该如何将它暴露在代码的结构中呢?