【问题标题】:what is the different between cgaputc(int c) / uartputc(int c) / constputc( int c) in xv6?xv6 中的 cgaputc(int c) / uartputc(int c) / constputc(int c) 有什么区别?
【发布时间】:2014-03-16 14:11:17
【问题描述】:

在 xv6 MIT 操作系统中,我试图了解 /xv6/console.c

中的几个 putc 函数有什么不同
  1. 静态 void cgaputc(int c)。
  2. void uartputc (int c)。
  3. 静态 void constputc(int c)。

谢谢!

【问题讨论】:

    标签: c unix console kernel xv6


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      consult the code 可以看到所有这些功能的作用。

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

      uartputc(int c) 使用in and outc 写入串口(UART)

      cgaputc(c) 似乎是一个控制台输入/输出函数。将c写入串口或控制台,同时设置光标位置和控制台颜色(白底黑字)

      这就是我阅读代码得到的结果,我以前没有使用过这些功能,但看起来很简单。

      【讨论】:

      • cgaputc() 写入 CGA 文本帧缓冲区,并通过 CRTC 端口寄存器 14 和 15 操作光标位置。
      猜你喜欢
      • 1970-01-01
      • 2010-09-12
      • 2012-08-30
      • 2021-01-05
      • 2014-06-07
      • 1970-01-01
      • 1970-01-01
      • 2020-04-25
      • 1970-01-01
      相关资源
      最近更新 更多