在xv6中,cgaputc(int c)/uartputc(int c)/constputc(int c)之间有什么不同?
在xv6mit操作系统中,我试图理解/xv6/console.c中的几个putc函数之间的区别在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写入串行端口或控制台,并设
谢谢 您可以查看所有这些函数的作用
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操纵光标位置。