0
在嵌入式編程中,可以通過放置在正確地址的結構來訪問內存映射外設。我如何確保對外設的內存訪問確實在Rust的總線上執行?在C中,這可以通過設置變量或字段volatile
來完成。如何確保內存映射外設的內存訪問是不穩定的?
考慮這個例子:
#[repr(C)]
struct Periph {
sr: u32, /* Status */
cr: u32, /* Control */
dr: u32, /* Data */
}
const PERIPH1: *mut Periph = 0x10001200 as *mut Periph;
const PERIPH2: *mut Periph = 0x10001400 as *mut Periph;
fn useperiph(p: &mut Periph) -> i32 {
p.cr = CR_CONSTANT;
if p.cr != CR_CONSTANT {
/* Peripheral was not enabled */
return -1;
}
/* Loop a few micro seconds until ready */
while p.sr != SR_CONSTANT {}
/* Write values to hardware FIFO */
p.dr = DATA1;
p.dr = DATA2;
p.dr = DATA3;
0
}
我需要確保編譯器不會刪除支票上的控制寄存器,將離開狀態寄存器的所有負載,而不會崩潰三個店到數據寄存器。我怎麼做?
也就是說https://stackoverflow.com/q/35009015/1233251的副本,但答案是過時的。我想我應該在那裏做一個更新的答案,而不是在這裏複製信息。 –
請參閱我的回答[here](https://stackoverflow.com/a/44510388/1233251)。 –