替换键盘中断(中断9)拨打了两个电话,而不是一个

时间:2019-01-25 12:40:08

标签: c operating-system interrupt dosbox

每次按键盘都会进入两次替换中断的功能。为什么要打apping?

也许scanf干扰后的“输入”?但这不仅是在每次尝试

之后,每次按两次都会进入该功能

我在做什么错?如何使它每次只按一次进入功能一次?在图片中您可以看到我只按了5次而不是5次

enter image description here

#include<stdio.h>
#include<dos.h>

volatile int ctrl_break_flag;   //counter
void interrupt(*Int9Save)(void);   


void interrupt my_func8(void)
{
  ctrl_break_flag++;
  printf("%d\n",ctrl_break_flag);
  Int9Save();
  }
void main()
{
 int N=0,i;
 Int9Save=getvect(9); //Save pointer to original interrupt.
 printf("Please enter number: ");
 scanf("%d",&N);
 setvect(9,my_func8);//Set interrupt pointer to our function.
 ctrl_break_flag=0;

 while(ctrl_break_flag<N);
   printf("End");
 setvect(9,Int9Save);//Return to original interrupt.
 return;
}

1 个答案:

答案 0 :(得分:0)

为了避免它,您可以简单地设置整数来计算中断的次数,然后忽略所有奇数。

代码示例:

void interrupt Keyboard(void){
    check++;
    Keyboard_Flag=1;
    if(check%2==0) //print only button pressed(will print only 
                                               odd interrupts)
    printf(" KeyPressed");
    Int9Save(); // return state
    
}