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

时间:2017-09-03 21:16:42

标签: rust embedded 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但是我想继续我自己的解决方案,因为它是一个学习项目。

1 个答案:

答案 0 :(得分:1)

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'));
}

我自己没有测试过。