可变全局状态
很不幸, 硬件基本是就是可变的全局状态, 这对于 Rust 开发者来说非常恐怖. 硬件独立于我们写的代码而存在, 并且可以随时被现实世界改变状态.
我们的规则?
我们如何和这些外设进行可靠的交互?
- 始终使用
volatile
方法读取或写入外设内存, 因为它随时可能发生变化 - 在软件中, 我们应该只共享这些外设的不可变引用
- 如果某些软件需要对外设进行读写, 则应该保留对该外设的唯一引用
引用检查器
这些规则的最后两条听起来很想引用检查器已经在做的事情!
想象一下我们是否可以放弃对这些外设的所有权, 或者只是用可变或者不可变的引用?
好吧, 我们可以, 但是对于引用检查器, 我们需要每个外设都存在一个唯一实例, 来让 Rust 正确处理引用检查. 幸运的是, 在硬件中任何外设都只有一个实例, 但是如何在代码中展示出来呢?