MMIO 的易失性内存访问
- 使用
pointer::read_volatile
和pointer::write_volatile
。 - 切勿提及引用。
- 借助
addr_of!
,您无需创建中间引用即可获取结构体字段。
- 易失性访问:执行读取或写入操作可能会产生副作用,因此应阻止编译器或硬件对这些操作进行重新排序、复制或省略。
- 通常情况下,如果您先写入操作,紧接着进行读取操作(例如通过可变引用),则编译器可能会认为读取的值是最新写入的值,就不再执行实际的内存读取过程。
- 虽然在对硬件进行易失性访问时,一些 crate 确实会提及引用,但这很不安全。只要存在引用,编译器就会选择对其进行解引用操作。
- 使用
addr_of!
宏可以从结构体指针中获取结构体字段的指针。