私はRustのSTM32F1xxに対して "Blinky"を作ろうとしています。 私はlibsがあることを知っていますが、私は学習目的のために自分の "lib"を作りたいと思っています。Rustのメモリマップアドレスに書き込むにはどうすればいいですか?
私はCで、このように自分のアドレスでSTM32の「レジスタ」にアクセスすることができます
*(uint32_t*)(0x40021000 + 0x018) |= 0x10;
*(uint32_t*)(0x40011000 + 0x004) |= 0x33;
*(uint32_t*)(0x40011000 + 0x004) &= ~0xCC;
*(uint32_t*)(0x40011000 + 0x10) |= 0x300;
while(1) {}
これは、ポートCのクロッキングを可能にするためにRCC_APB2ENR
レジスタにいくつかのビットを書き込み、ピンを設定し、私のディスカバリー上のLEDを可能にします。
これをRustで書き直して、const、fnsを作成し、素敵なRustyコードを書き始める必要があります。 FFIがCコードを呼び出すことなくRustで可能ですか? asm!
マクロでこれを達成できますか?
不揮発性ポインタのコンパイラの動作はCとRustで同じですか? – fevgenym
はい、Rustコンパイラは同じ最適化を実行できます。これを行うLLVMバックエンドは両方の言語で使用されます。 – starblue