将 char 定位在特定的内存地址

Position char at a specific memory address

我正在使用 Rust 写入 VGA 输出。我对这个嵌入式领域绝对陌生,我想这不仅是 Rust 问题,也是一个普遍问题。

我想将不同的字符写入输出屏幕:

let buff: *mut u8 = (0xb8000 + 1988) as *mut _;

unsafe {
    ptr::write(buff, (b'f'));
    ptr::write(buff, (b'o'));
    ptr::write(buff, (b'o'));
}

执行此操作时,我只看到屏幕上的最后一个字符 (o),因为它们没有写入其他位置。

直接写入内存地址时,如何确定字符的位置?

我知道 Phil Opp's tutorial 但我想继续使用我自己的解决方案,因为它是一个学习项目。

Phil Opp's tutorial中所述,每个字符为 16 位(2 个字节),包括字符和颜色代码。

对于您希望输出的每个额外字符,将缓冲区指针偏移 2 个字节。

let buff: *mut u8 = (0xb8000 + 1988) as *mut _;

unsafe {
    ptr::write(buff, (b'f'));
    ptr::write(buff.offset(2), (b'o'));
    ptr::write(buff.offset(4), (b'o'));
}

我自己还没有测试过。