gpt4 book ai didi

rust - 如何确保对内存映射外设的内存访问是易变的?

转载 作者:行者123 更新时间:2023-11-29 08:33:10 25 4
gpt4 key购买 nike

<分区>

在嵌入式编程中,可以通过位于正确地址的结构访问内存映射外设。如何确保在 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
}

我需要确保编译器不会取消对控制寄存器的检查,保留状态寄存器的所有负载,并且不会将三个存储折叠到数据寄存器。我该怎么做?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com