在MIT操作系统xv6中,我正在尝试理解/xv6/console.c中几个putc函数之间的区别。
1. static void cgaputc(int c)。 2. void uartputc(int c)。 3. static void constputc(int c)。
谢谢!
1. static void cgaputc(int c)。 2. void uartputc(int c)。 3. static void constputc(int c)。
谢谢!
consputc()
是一个控制台输出函数。它将一个char
写入控制台,在该操作系统中,这似乎意味着串行端口和CGA文本显示器。在执行此操作之前,它首先检查系统是否已经崩溃(崩溃是内核遇到错误并不知道该怎么做时进入的状态,因此不会继续执行而可能使情况变得更糟,相反会选择崩溃并停止),如果是,则进入一个无限循环,并禁用中断,因此只有系统重置才能离开崩溃状态。
uartputc()
将char
写入串行端口。它首先检查串行端口是否空闲,并接受char
。
cgaputc()
将字符写入CGA文本帧缓冲区,并相应地调整光标位置。 CGA文本帧缓冲区从地址0xb8000开始,由交错的(属性,字符)字节组成。默认模式,模式3是80x25(80列,25行)文本模式。属性07表示黑色背景上的灰色文本。通过CRT控制器端口操纵光标位置,该端口公开了几个寄存器,寄存器14和15将光标位置保持为14位。首先通过将其数字写入索引CRTC端口0x3d4来选择要访问的寄存器,然后从CRTC控制/数据端口0x3d5读取或写入。这些内容在一个名为vgadoc4b的文档和Ralph Brown's interrupt list中有记录。
cgaputc()
函数用于向 CGA 文本帧缓冲区写入数据,并通过 CRTC 端口寄存器 14 和 15 操纵光标位置。 - ninjalj