簡體   English   中英

替換鍵盤中斷(Interrupt 9)進行兩次調用而不是一次調用

[英]Replace keyboard interrupt (Interrupt 9) makes two calls rather than one

每按一次鍵盤將進入兩次替換中斷的函數。 為什么會這樣?

也許 scanf 之后的“輸入”會干擾? 但是每次按下它都會進入該功能兩次,而不僅僅是在第一次嘗試之后

我究竟做錯了什么? 我怎樣才能讓它每次按一次只進入一次功能? 在圖片中你可以看到我只按了兩次 5 而不是 5 次

在此處輸入圖片說明

#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;
}

為了避免它,您可以簡單地設置整數來計算中斷的次數,然后忽略所有奇數。

代碼示例:

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
    
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM