MMIOに対するvolatileアクセス

  • 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.