таймер не генерирует прерывания ... или что? - PullRequest
0 голосов
/ 11 сентября 2011

#define TIMER_IVT_ENTRYNUM 0x1C или же #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), она работает ...

Как таймер никогда не генерирует прерывания сам ... o.O Я на Win XP 32bit, Borland C ++ 3.1 (это обязательно)

1 Ответ

0 голосов
/ 11 сентября 2011

Вы пытаетесь применить некоторые вещи для DOS в Win XP? Последней ОС, где он мог работать, была Win98. Начиная с WinNT, вы можете иметь прямой доступ к аппаратным ресурсам только в режиме ядра, написание драйверов режима ядра.

В вашем случае попробуйте найти какой-нибудь эквивалент пользовательского режима для обработки прерываний таймера (например, мультимедийные таймеры, http://msdn.microsoft.com/en-us/library/dd743609(v=vs.85).aspx), или начните писать драйверы для Windows: http://msdn.microsoft.com/en-us/windows/hardware/default.aspx

По поводу Borland C ++ 3.1 ... Мне действительно нечего сказать: (

...