簡體   English   中英

xv6中的cgaputc(int c)/ uartputc(int c)/ constputc(int c)有什么區別?

[英]what is the different between cgaputc(int c) / uartputc(int c) / constputc( int c) in xv6?

在xv6 MIT操作系統中 ,我試圖了解/xv6/console.c中的幾個putc函數之間的區別。

  1. 靜態無效的cgaputc(int c)。
  2. 無效的uartputc(int c)。
  3. 靜態空constputc(int c)。

謝謝!

consputc()是控制台輸出函數。 它將一個char寫入控制台,該char在該OS中似乎意味着串行端口和CGA文本顯示。 在此之前,它首先檢查系統是否發生了緊急情況(緊急情況是內核在遇到錯誤且不知道該怎么辦時進入的狀態,因此與其繼續進行並可能使情況變得更糟,不如決定緊急狀態並停止),如果這樣,則會進入無限循環並禁用中斷,因此只有系統復位才能退出緊急狀態。

uartputc()char寫入串行端口。 它首先檢查串行端口是否不繁忙,並接受char

cgaputc()將一個char寫入CGA文本幀緩沖區,並相應地調整光標位置。 CGA文本幀緩沖區的起始地址為0xb8000,由交錯的(屬性,字符)字節組成。 默認模式3是80x25(80列25行)文本模式。 屬性07表示在黑色背景上的灰色文本。 光標位置通過CRT控制器端口進行操作,該端口公開了幾個寄存器,寄存器14和15將光標位置保留為14位。 通過首先選擇要訪問的寄存器來訪問CRTC,方法是將寄存器的編號寫入索引CRTC端口0x3d4,然后從CRTC控制/數據端口0x3d5進行寫入或讀取。 這些東西記錄在名為vgadoc4b的文檔中,以及在Ralph Brown的中斷列表中

如果查閱代碼,則可以看到所有這些功能的作用。

consputc(int c)清除中斷,然后調用uartputc() ,然后調用cgaputc()

uartputc(int c)使用in和outc寫入串行端口(UART)

cgaputc(c)似乎是控制台輸入/輸出功能。 c寫入串行端口或控制台,它還設置光標的位置並設置控制台的顏色(黑底白字)

無論如何,這就是我從閱讀代碼中獲得的,我以前沒有使用過這些函數,但是看起來很簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM