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.