2011-09-11 4 views
0

#define TIMER_IVT_ENTRYNUM 0x1C 또는 I는 다음과 같습니다 내 자신의 인터럽트 핸들러 설정 방법 #define TIMER_IVT_ENTRYNUM 0x08타이머가 인터럽트를 생성하지 않습니다 ... 또는 무엇?

prevInt = getvect(TIMER_IVT_ENTRYNUM); 
    setvect(TIMER_IVT_ENTRYNUM, currInt); 

:

void interrupt Timer::currInt(...) { 
    (*prevInt)(); //old timer routine 
    cout << "TIMER occurence" << endl; 

    lock(); 
    counter++; 
    tick(); //empty body 

    if ((Kernel::getRunning() -> getTimeSlice() > 0)) 
     if (counter >= Kernel::getRunning() -> getTimeSlice()) { 
      unlock(); 
      dispatch(); 
      //dispatchInterrupt(); 
     }; 

    unlock(); 
}; 

어쨌든, 타이머 인터럽트가 전혀 자신에 발생하지 않습니다를. ..하지만 내가 int 루틴을 명시 적으로 geninterrupt(TIMER_IVT_ENTRYNUM)을 사용하여 호출하면 ...

마찬가지로 타이머 자체를 생성하지 인터럽트 ... OO Win XP 32 비트, Borland C++ 3.1 (필수 항목 임)

+0

btw, 프로그램이 55ms 이상 실행되도록하기 위해'sleep (seconds)'가 타이머와 독립적인지 확실하지 않기 때문에 휘발성 변수에 몇 수백만 연산을로드한다. 나는 그렇다고 생각하지만, 심지어 인터럽트 실행의 증거가 없다 ... – maricn

답변

0

Windows XP에서 일부 DOS 항목을 적용하려고합니까? 그것이 작동 할 수있는 마지막 운영 체제는 Win98입니다. WinNT부터 커널 모드 드라이버를 작성하여 커널 모드에서만 하드웨어 리소스에 직접 액세스 할 수 있습니다. 볼랜드 C++ 3.1과 관련하여 http://msdn.microsoft.com/en-us/windows/hardware/default.aspx

... 난 정말이 : 귀하의 경우

(멀티미디어 타이머, http://msdn.microsoft.com/en-us/library/dd743609(v=vs.85).aspx 등) 또는 Windows 드라이버를 쓰기 시작 인터럽트 처리 타이머에 대한 몇 가지 사용자 모드 상당을 찾으려고 할 말이 없다 : (

+0

그래, 나는 그 모든 것을 알고있다. 그러나 그것은 나의 "운영체제"임무이고, 나는 그런 식으로해야만한다 ... 그리고 저는 동료들과 함께 타이머를 초기화하는 코드가 모두 같고 매우 비슷합니다./ – maricn

+0

이 경우에는 다른 OS가 필요합니다. WinXP에서는 작동하지 않습니다. –

+0

예전의 코멘트 알아,하지만 이것이 XP에서 작동해서는 안되는 이유는 없습니다. 예, XP는 9x처럼 직접 HW 액세스를 허용하지 않지만 DOS/Win9x/Win3x 소프트웨어와의 호환성을 유지하기 위해 이전 응용 프로그램이 액세스 할 수 있도록하는 에뮬레이트 된 하드웨어를 제공합니다. – Stu

관련 문제