C++ 坏状态寄存器?

C++ 坏状态寄存器?,c++,keyboard,x86,kernel,hardware,C++,Keyboard,X86,Kernel,Hardware,在一个项目上工作。教授给了我们一个带有一些测试的.zip文件,所以我们可以看看我们的项目是否正常工作。我们在C++中构建一个小的内核。 无论如何,有一个线程在等待键盘中断(event9.wait()),然后它应该将字符放入缓冲区或结束程序(如果按“esc”) 我检查过了,我确信它会定期等待中断。出现此问题的原因是状态&0x01为0 然后我得到了从0x60获取字符的代码部分,它工作得很好 测试文件的代码有问题吗?如果是,什么?如果代码正确,是什么导致问题 我可以更改测试文件,但我需要一个很好的理由

在一个项目上工作。教授给了我们一个带有一些测试的.zip文件,所以我们可以看看我们的项目是否正常工作。我们在C++中构建一个小的内核。 无论如何,有一个线程在等待键盘中断(event9.wait()),然后它应该将字符放入缓冲区或结束程序(如果按“esc”)

我检查过了,我确信它会定期等待中断。出现此问题的原因是状态&0x01为0

然后我得到了从0x60获取字符的代码部分,它工作得很好

测试文件的代码有问题吗?如果是,什么?如果代码正确,是什么导致问题

我可以更改测试文件,但我需要一个很好的理由这样做。到目前为止,我唯一的原因是它不起作用


*注意:评论是从塞尔维亚语翻译过来的,但我几乎可以肯定它们翻译正确。

我认为
status&0x01
非常好。但是,在读取端口0x60后,您需要再次读取端口-很可能您稍后会在代码中这样做,但我个人只需将代码重新写入:

    while ((status = inportb(0x64)) & 0x01){ //while status indicates that keys are pressed
            ....

请注意,在这种情况下,不应在循环内再次读取端口0x64。

那么问题出在其他地方?因为它不在while循环中。有什么问题吗?我看不出我的代码会影响这个部分。到目前为止,我只更改了IVT中第9项的中断功能。我真的被困在这一点上:(对不起,远程调试这类问题非常困难。你真的从键盘上得到了中断吗?如果你写一些代码直接在中断处理程序中读取端口64,会发生什么?我解决了这个问题。它发生了。问题是旧的例程(=处理程序?)应该有一个指示器在新例程中被调用。我关闭了它,现在它可以工作了。我猜旧例程(=处理程序?)正在“窃取”指示器?因为在新例程中,顺序是:给线程发信号,执行旧例程,在“event9.wait()”之后编码。无论如何,非常感谢[:你为我节省了几个小时^^
    while ((status = inportb(0x64)) & 0x01){ //while status indicates that keys are pressed
            ....