在一个项目上工作。教授给了我们一个带有一些测试的.zip文件,因此我们可以查看我们的项目是否正常运行。我们正在用c ++构建一个小的内核。
无论如何,有一个线程在等待键盘中断(event9.wait()),然后将字符放入缓冲区或结束程序(如果您按“ esc”)。
while (!theEnd) {
event9.wait();
status = inportb(0x64); // reading status reg. from 64h
while (status & 0x01){ //while status indicates that keys are pressed
....
我检查了一下,我确定它会定期等待中断。发生此问题,因为status&0x01为0。
然后我得到了从0x60获取字符的代码部分,它工作得很好。
测试文件的代码有问题吗?如果是的话,那是什么?如果代码正确,什么会导致问题?
我可以更改测试文件,但是我有充分的理由这样做。到目前为止,我唯一的原因是它不起作用。
*注:注释是从塞尔维亚语翻译而来的,但我几乎可以肯定它们是正确翻译的。
最佳答案
我认为status & 0x01
很好。但是,您需要在读取端口0x60之后再次读取该端口-很有可能是您稍后在代码中进行的操作,但是我个人只是将代码重写为:
while ((status = inportb(0x64)) & 0x01){ //while status indicates that keys are pressed
....
请注意,在这种情况下,您不应在循环内再次读取端口0x64。
关于c++ - 状态寄存器错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14540683/