在xv6中,cgaputc(int c) / uartputc(int c) / constputc( int c)有何不同?

4
在MIT操作系统xv6中,我正在尝试理解/xv6/console.c中几个putc函数之间的区别。
1. static void cgaputc(int c)。 2. void uartputc(int c)。 3. static void constputc(int c)。
谢谢!
2个回答

6

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中有记录。


2

如果您查看代码,就可以了解所有这些函数的作用。

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

uartputc(int c) 使用in和out命令将 c 写入串口(UART)

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

从阅读代码中得出以上结论,虽然我以前没有使用过这些函数,但它们似乎相当直观。


cgaputc() 函数用于向 CGA 文本帧缓冲区写入数据,并通过 CRTC 端口寄存器 14 和 15 操纵光标位置。 - ninjalj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接