Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在xv6中,cgaputc(int c)/uartputc(int c)/constputc(int c)之间有什么不同?_C_Unix_Console_Kernel_Xv6 - Fatal编程技术网

在xv6中,cgaputc(int c)/uartputc(int c)/constputc(int c)之间有什么不同?

在xv6中,cgaputc(int c)/uartputc(int c)/constputc(int c)之间有什么不同?,c,unix,console,kernel,xv6,C,Unix,Console,Kernel,Xv6,在xv6mit操作系统中,我试图理解/xv6/console.c中的几个putc函数之间的区别 静态无效cgaputc(int c) 无效UARTPTUTC(整数c) 静态void constputc(int c) 谢谢 您可以查看所有这些函数的作用 consputc(int c)清除中断,然后调用uartputc(),然后调用cgaptutc() uartptutc(int c)用于将c写入串行端口(UART) cgaputc(c)似乎是一个控制台输入/输出功能。将c写入串行端口或控制台,并设

在xv6mit操作系统中,我试图理解/xv6/console.c中的几个putc函数之间的区别

  • 静态无效cgaputc(int c)
  • 无效UARTPTUTC(整数c)
  • 静态void constputc(int c)

  • 谢谢

    您可以查看所有这些函数的作用

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

    uartptutc(int c)
    用于将
    c
    写入串行端口(UART)

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

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

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

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

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

    cgaptc()
    写入CGA文本帧缓冲区,并通过CRTC端口寄存器14和15操纵光标位置。