Прерывания в C / C ++ ??? Как они реализованы / закодированы? - PullRequest
5 голосов
/ 18 сентября 2010

Запрограммировав микроконтроллеры раньше и заинтересовавшись попытками в какой-то момент создать эмулятор NES, мне действительно стало интересно, как прерывания реализованы в C ++?

Как, например, программа знает, какреагировать, когда я говорю в микрофон или двигаю мышью?Это постоянно опрашивает эти порты?

При эмуляции прерывания для аппаратного устройства (скажем, для эмулятора NES), вы должны постоянно опрашивать или есть другой способ сделать это?

1 Ответ

6 голосов
/ 18 сентября 2010

Это вопрос, связанный с реализацией, но в общих чертах: прямой доступ к оборудованию через прерывания обычно ограничен ОС (в частности, ядром). Ваш код не будет иметь такого доступа ни в одной современной системе.Скорее, вы использовали бы специфичные для ОС API для доступа к оборудованию.

Короче говоря: настольные операционные системы не ведут себя как встроенные устройства с микроконтроллером.

Ввод пользователякак правило, обрабатывается в современных системах так называемым циклом событий .Ваше приложение делает что-то вроде этого, конкретная реализация варьируется в зависимости от ОС:

int main(int argc, char *argv[]) {
    Event *e = NULL;
    while (e = App::GetNextEvent()) {
        switch (e->getType()) {
        case E_MOUSEUP:
        case E_RIGHTMOUSEDOWN:
        case E_KEYDOWN:
        // etc.
        }
    }

    return EXIT_SUCCESS;
}

В этом примере App::GetNextEvent() не занята ожиданием: оно просто сидит и ничего не делает до тех пор, пока ОС не сообщит внутренне, чтособытие наступило.Таким образом, постоянный опрос не требуется, и ОС может более эффективно распределять временные интервалы между процессами.

Однако ... NES не является современной системой;эмуляция одного означает, что вам нужно эмулировать прерывания и аппаратное обеспечение NES .Это очень большая задача, которая не имеет отношения к базовому оборудованию или прерываниям операционной системы хоста.Процессор 6502 в NES очень прост по современным стандартам;Существуют книги, в которых обсуждается эмуляция подобных простых процессоров, хотя названия меня сейчас избегают.

Помогает ли это?

...