分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!
串列埠輸出東西太重要了,因此,再來仔細地看看串列埠呼叫的其它函式,這樣做到一目了然,沒有別的疑問在裡面,就可以做到庖丁解牛游刃有餘。像下面的函式:
printstr(" config=")
上面這句,就是輸出一串字元到串裡顯示出來。其實它是乙個巨集定義,那麼它是怎麼樣實現輸出字串到串列埠上的呢?立即去找到它的巨集定義,然後把它展開,最後看看它是怎麼樣的。巨集定義如下:
#define printstr(x) /
.rdata;98: .asciz x; .text; la a0, 98b; bal stringserial; nop
把它寫得好看一些,如下:
.rdata
98: .asciz x
.text
la a0,98b
bal stringserial
nop 第
一、二行是定義一串字串儲存的空間,放在唯讀資料段裡。第三行是定義**段開始,然後就是通過la指令獲取98標號處的字串首位址。最後跳到子函式stringserial裡執行輸出字串。一定要在跳轉的指令後面加入一條空指令,否則其它指令就會被執行。
現在又去檢視stringserial的**,它如下:
leaf(stringserial)
move a2, ra
addu a1, a0, s0
lbu a0, 0(a1) 1:
beqz a0, 2f
nopbal tgt_putchar
addiu a1, 1
b 1b
lbu a0, 0(a1) 2:
j a2
nopend(stringserial)
上面**,先把返回位址ra儲存到a2,然後計算字串的位址,接著通過lbu獲取第乙個字元,在beqz裡判斷是否到了字串結束,如果沒有結束就繼續呼叫顯示字元函式顯示。使用addiu指令來移動字串位址指標。
在b 1b後面還有一行lbu a0,0(a1)。由於龍芯是流水線的cpu,當跳**生時,已經把後面那一條指令解釋執行完成了,所以a0裡總是儲存最新的字元。
還用到乙個子函式
hexserial
以16進製制的方式輸出暫存器的值,它的**如下:
leaf(hexserial)
move a2, ra
move a1, a0
li a3, 7 1:
rol a0, a1, 4
move a1, a0
and a0, 0xf
la v0, hexchar
addu v0, s0
addu v0, a0
bal tgt_putchar
lbu a0, 0(v0)
bnez a3, 1b
addu a3, -1
j a2
nopend(hexserial)
在函式的開始處,先儲存返回位址,儲存顯示的暫存器值,然後把32位的值分成8個字元顯示,li a3,7就是做8次的計數。
bnez a3,1b
addu a3,-1
同時也是利用跳轉同時改變a3的值。
要顯示16進製制的值,是使用查表法實現的。
hexchar
是**的首位址。
下面再看怎麼樣實現顯示乙個字元的**:
leaf(tgt_putchar)
# la v0, com1_base_addr
la v0, com3_base_addr 1:
lbu v1, nsreg(ns16550_lsr)(v0)
and v1, lsr_txrdy
beqz v1, 1b
nopsb a0, nsreg(ns16550_data)(v0)
move v1, v0
la v0, com3_base_addr
bne v0, v1, 1b
nopj ra
nop
end(tgt_putchar)
上面的**是從串列埠3顯示字元出來。先要判斷串列埠是否可以傳送資料,如果不能傳送,就迴圈查詢,直到可以傳送為止。
到這裡已經把串列埠看完了。
給我老師的人工智慧教程打call!
6410串列埠軟體
我用vs2005編寫的串列埠應用程式,寫好後同步到6410板子上 開啟串列埠 bool cserial1dlg openport lpctstr port,int baudrate,int databits,int stopbits,int parity getcommstate hcomm,dcb...
龍芯軟體開發 12 龍芯2E摸索前行
上一次說到怎麼樣執行起來,現在接著上次再進行分析下去。在 locate的程式,如下 locate la s0,start subu s0,ra,s0 ands0,0xffff0000 li t0,sr boot exc vec mtc0 t0,cop 0 status reg mtc0 zero,c...
龍芯軟體開發 4 主要晶元介紹
要對龍芯電腦開發,也需要了解硬體的組成,這樣才可以對它進行編寫相應的驅動程式和使用。現在就來了解一下龍芯電腦的主要晶元組成,下面先從網上的龍夢電腦的組成來入手。它的配置如下 福瓏 迷你電腦 cpu 龍芯 2e cpu 主頻600mhz 900mhz 支援ddr333 記憶體匯流排,功耗 2 4瓦 北...