Acesso volĂĄtil Ă  memĂłria para MMIO

  • Use pointer::read_volatile e pointer::write_volatile.
  • Nunca segure uma referĂȘncia.
  • addr_of! permite obter campos de estruturas sem criar uma referĂȘncia intermediĂĄria.
  • Acesso volĂĄtil: operaçÔes de leitura ou gravação podem ter efeitos colaterais, portanto, impedem que o compilador ou o hardware os reordenem, duplicem ou omitam.
    • Normalmente, se vocĂȘ gravar e depois ler, por exemplo, por meio de uma referĂȘncia mutĂĄvel, o compilador pode assumir que o valor lido Ă© o mesmo que o valor acabou de ser gravado e nĂŁo se preocupar em ler a memĂłria.
  • Algumas crates existentes para acesso volĂĄtil ao hardware mantĂȘm referĂȘncias, mas isso Ă© incorreto. Sempre que uma referĂȘncia existir, o compilador poderĂĄ optar por desreferenciĂĄ-la.
  • Use a macro addr_of! para obter ponteiros de campo de um struct de um ponteiro para o struct.