将 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'));
}
我自己还没有测试过。
我正在使用 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'));
}
我自己还没有测试过。