2

在 xv6 MIT 操作系统中,我试图了解/xv6/console.c中的几个 putc 函数有什么不同

  1. 静态无效 cgaputc(int c)。
  2. 无效 uartputc (int c)。
  3. 静态无效 constputc(int c)。

谢谢!

4

2 回答 2

4

consputc()是一个控制台输出函数。它将 a 写入char控制台,在该操作系统中,这似乎意味着串行端口和 CGA 文本显示。在此之前,它首先检查系统是否出现恐慌(恐慌是内核在遇到错误并且不知道该怎么做时进入的状态,因此与其继续前进并可能使事情变得更糟,不如决定恐慌并停止),如果是这样,则进入禁用中断的无限循环,因此只有系统重置才能离开恐慌状态。

uartputc()将 a 写入char串行端口。它首先检查串行端口是否不忙,并将接受char.

cgaputc()将一个字符写入 CGA 文本帧缓冲区,并相应地调整光标位置。CGA 文本帧缓冲区从地址 0xb8000 开始,由交错的(属性、字符)字节组成。默认模式,模式 3 是 80x25(80 列,25 行)文本模式。属性 07 表示黑色背景上的灰色文本。光标位置通过 CRT 控制器端口进行操作,该端口公开了几个寄存器,寄存器 14 和 15 将光标位置保存为 14 位。访问 CRTC 的方法是,首先选择要访问的寄存器,方法是将其编号写入 0x3d4 处的索引 CRTC 端口,然后在 0x3d5 处从 CRTC 控制/数据端口写入或读取。这些内容记录在名为vgadoc4b的文档中,以及Ralph Brown 的中断列表中

于 2014-03-16T15:22:18.483 回答
1

如果您查阅代码,您可以看到所有这些功能的作用。

consputc(int c)清除中断然后调用uartputc()然后调用cgaputc()

uartputc(int c)使用in 和 out写入c串行端口 (UART)

cgaputc(c)似乎是控制台输入/输出功能。写入c串行端口或控制台,它还设置光标的位置并设置控制台的颜色(白底黑字)

无论如何,这就是我从阅读代码中得到的,我以前没有使用过这些函数,但它看起来很简单。

于 2014-03-16T14:32:47.647 回答