繼續分析原來的**,現在已經進入乙個比較重要的函式
dbginit()
,因此這個函式相當複雜的功能呼叫。 /*
*init pmon and debug */
cpuinfotab[0] = &dbgreg;
dbginit(null);
第一行**
cpuinfotab[0]
儲存dbg
暫存器值,主要包括
32個通用暫存器和
cp0的
32暫存器,以及兩個乘法除法這暫存器。
現在就來仔細地檢視
dbginit
(null)
的實現,**如下: /*
*pmon2000 entrypoint. called after initial setup. */
void
dbginit
(char *adr)
這個函式做了很多任務作,下面要仔細地分析每個子函式實現的功能,才能理解後面所做的工作,否則也不知道後面會做些什麼。又進入下一層函式分析它的實現。
首先來了解怎麼樣初始化
c++的構函式和全域性靜態變數。仔細地看一下函式
__init()
,如下:
void
__init()
}在這個函式裡,先判斷是否已經初始化全域性函式和建構函式,如果沒有初始化,就設定為已經初始化,接著呼叫函式初始化全域性
__ctors
()函式。也許你會問,這些全域性函式從那裡來的呢?
如果你去看看
gcc的連線說明檔案,就會發現有這個段在那裡,因此這些全域性函式是由編譯器生成的,並不是由使用者定義。如果不呼叫這些全域性初始化函式,很多全域性變數是沒有定義的值,本來你程式設計時初始化為
100的值,可能只是
0或者任意的數值。現在又立即去看函式
__ctors
()的實現,如下:
static
void
__ctors()
由於gcc
.ctors :
.dtors :
編譯器就會根據上面的連線指令碼生成全域性初始化函式和全域性析構函式,並且每個函式入口是按照4位元組的指標排列的。因此,在函式
__ctors
()裡迴圈地呼叫所有函式執行一遍。後面析構函式相應也呼叫函式
__dtors
()來實現的。
龍芯軟體開發 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瓦 北...
軟體開發 非功能需求與功能需求
需求定義 需求 requirement 就是系統 更廣義的說法是專案 必須提供的能力和必須遵從的條件。需求分類 1 在一般使用中,需求按照功能性 行為的 和非功能性 其它所有的行為 來分類。功能性需求是說有具體的完成內容的需求。非功能性需求是指軟體產品為滿足使用者業務需求而必須具有且除功能需求以外的...