MMIOに対するvolatileアクセス
- Use
pointer::read_volatile
andpointer::write_volatile
. - 絶対に参照を保持してはいけません。
- Use
&raw
to get fields of structs without creating an intermediate reference.
- Volatileアクセス:MMIO領域に対するreadやwriteは副作用があることがあるので、コンパイラやハードウェアが実行順序を変更したり、複製したり、省略したりできないようにするためのものです。
- 通常は、例えばある可変参照に対してライトしリードすると、コンパイラはライトしたのと同じ値がリードで読み出されると想定し、実際にメモリをリードする必要はないと判断します。
- ハードウェアへのvolatileアクセスを行うための既存のクレートには参照を保持するものがありますが、これは健全ではありません。参照が存在する間はいつでもコンパイラがその参照を外して(MMIO領域にアクセスして)しまう可能性があります。
- Use
&raw
to get struct field pointers from a pointer to the struct. - For compatibility with old versions of Rust you can use the
addr_of!
macro instead.