2014-02-08 142 views
3

EDIT:XV6加計數系統的系統調用調用

得到它

這裏是我做過什麼:

在syscall.c:

extern int numSysCalls; 

在sysproc.c :

int numSysCalls = -1; 

好的,所以我正在實施一個簡單的系統調用,返回系統調用的次數。似乎很容易,但我得到一個錯誤,我不明白...

基本上,這裏是我所做的:在syscall.c中有 有一個函數調用syscall(),檢查它是否是一個系統調用或不。我基本上已經聲明瞭一個變量,並且每次調用這個函數時都會增加它。

瓦爾宣言syscall.c:

18: int16_t numSysCalls = -1; //global 

系統調用()函數:

115: void syscall(void){ 
116:  numSysCalls++; 
... 

錯誤我越來越:

kernel/syscall.c:116: error: ‘numSysCalls’ undeclared (first use in this function) 
kernel/syscall.c:116: error: (Each undeclared identifier is reported only once 
kernel/syscall.c:116: error: for each function it appears in.) 

然後,在sysproc.c,我有相同的extern int,並且在我調用函數numCalls時簡單地返回int,如下所示:

在sysproc.c外部變量:有問題

extern int numSysCalls; 

法:

int sys_numSys(void){ 
if (numSysCalls == -1) return numSysCalls; 
else return numSysCalls + 1; 
} 

綜上所述:numSysCalls應增加每當一個(任何種類的)系統調用被稱爲 - 成功或不。

numSys只返回數字,如果有錯誤則返回-1。

+0

是從syscall.c中可見的外部? – suspectus

+0

是的。見上面的編輯。 (當我在這裏粘貼時,我不小心剪掉了「extern」) – katiea

+1

定義是int16_t類型,而extern是int類型。 – suspectus

回答

-2

答案是與extern和int類型相比,位置/調用來的。花了一些試驗和錯誤。

+1

不討論問題的解決方案。 – neo7

+0

@Alchemist我同意你的看法 –