2014-02-08 78 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我同意你的看法 –