Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Operating system 中断处理程序只工作一次_Operating System_Interrupt - Fatal编程技术网

Operating system 中断处理程序只工作一次

Operating system 中断处理程序只工作一次,operating-system,interrupt,Operating System,Interrupt,对于一个操作系统项目,我试图在x86系统中实现中断。我正在准备中断描述符表并加载。出于演示目的,我正在处理键盘中断。然而,键盘的中断处理程序只能工作一次。可能有什么问题,我如何解决?提前谢谢 编辑: 我使用的代码与下面链接中的代码相同。(示例代码) 编辑: 这个话题可以结束了,问题现在解决了。我只需要读取keycode端口,而不是根据状态端口进行操作。几乎可以肯定,这: status = read_port(0x64); /* Lowest bit of status will be se

对于一个操作系统项目,我试图在x86系统中实现中断。我正在准备中断描述符表并加载。出于演示目的,我正在处理键盘中断。然而,键盘的中断处理程序只能工作一次。可能有什么问题,我如何解决?提前谢谢

编辑:

我使用的代码与下面链接中的代码相同。(示例代码)

编辑:
这个话题可以结束了,问题现在解决了。我只需要读取keycode端口,而不是根据状态端口进行操作。

几乎可以肯定,这:

 status = read_port(0x64);
 /* Lowest bit of status will be set if buffer is not empty */
 if (status & 0x01) {
应该是这样的:

 while ((status = read_port(0x64)) & 1) {
 /* Lowest bit of status will be set if buffer is not empty */

清除设备中断。原始PC/AT集成设备仅为边缘触发设备,因此您必须确保在退出中断处理程序之前清除中断源。

发布代码。水晶球不是有用的远程调试器。你有没有任何代码可以向我们展示你迄今为止所做的尝试。(否则,这个问题就结束了)。