4

编辑:

知道了

这是我所做的:

在 syscall.c 中:

extern int numSysCalls;

在 sysproc.c 中:

int numSysCalls = -1;

好的,所以我正在努力实现一个简单的系统调用,它返回系统调用的次数。看起来很简单,但我遇到了一个我不明白的错误......

基本上,这就是我所做的:在 syscall.c 中有一个名为 syscall() 的函数,用于检查它是否是系统调用。我基本上已经声明了一个变量,并且每次调用这个函数时都会递增它。

syscall.c 中的 Var 声明:

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。

4

0 回答 0