Работаю над проектом. Профессор дал нам файл .zip с некоторыми тестами, чтобы мы могли видеть, работает ли наш проект правильно. Мы строим небольшое ядро на С ++.
Во всяком случае, есть поток, который ожидает прерывания клавиатуры (event9.wait ()), и после этого он должен поместить символы в буфер или завершить программу (если вы нажмете «esc»).
while (!theEnd) {
event9.wait();
status = inportb(0x64); // reading status reg. from 64h
while (status & 0x01){ //while status indicates that keys are pressed
....
Я проверил, и я уверен, что он регулярно ждет прерывания. Проблема возникает из-за статуса&0x01 это 0.
Затем я получил часть кода, которая получает символы от 0x60, и она работала просто отлично.
Что-то не так с кодом тестовых файлов? И если да, то что? Если код правильный, что может вызвать проблему?
Я мог бы изменить тестовые файлы, но мне нужна веская причина для этого. И до сих пор единственная причина, по которой я имею это то, что это не работает.
* примечание: комментарии переведены с сербского, но я почти уверен, что они переведены правильно.
Я думаю status & 0x01
отлично в порядке. Однако вам нужно будет снова прочитать порт после чтения порта 0x60 — вполне возможно, что вы сделаете это позже в коде, но я лично просто переписал бы код в:
while ((status = inportb(0x64)) & 0x01){ //while status indicates that keys are pressed
....
Обратите внимание, что в этом случае вы не должны снова читать порт 0x64 внутри цикла.
Других решений пока нет …