我正在使用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但是我想继续我自己的解决方案,因为它是一个学习项目。
答案 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'));
}
我自己没有测试过。