Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MKGA
0 / 0 / 0
Регистрация: 05.09.2007
Сообщений: 7
#1

Ошибка при работе с портами - C++

06.01.2008, 17:15. Просмотров 842. Ответов 6
Метки нет (Все метки)

Следующ.кусок кода определяет нажата клавиша Esc или F8. После компиляции при запуске проги и при нажатии F8 вызывается функция printf произвольное кол-во раз (по идее должно всего один), но
под дебагером printf вызывается один раз. И в Borlande и в Watcome
одинаковый результат
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
while (chz!=1)
{
asm {
mov byte ptr [chz],0
 
in al,060h //читаем код клавиши
mov byte ptr [chz],al
 
//cli обнуляем буфер клавиатуры
xor ax,ax
mov es,ax
mov al,es:[41AH]
mov es:[41CH],al
//sti
}
 
switch (chz){
case 0x42: //здесь собственно глюк
printf( '0x42 UP...
' );
        Up();
break;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2008, 17:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при работе с портами (C++):

Не является внутренней или внешней командой - ошибка не при компиляции а при работе программы - C++
В VS скомпилировал код #include <iostream> using namespace std; int main() { int a; cout<<"Hallo"; cin>>a; cout<<a; ...

ошибка при работе со стуктурами - C++
Возникает проблема при передаче структурных переменных в ф-цию Например: void showdatabase(struct Company *a,int i) { cin>>a.salary; ...

Ошибка при работе с мютексом - C++
Пытаюсь написать класс защищенный стек, но получаю ошибку при работе с мютексом: error C2248: std::mutex::mutex: невозможно обратиться к...

Ошибка при работе с памятью - C++
Есть класс, в котором я предпринимаю безрезультатные попытки работать с динамической памятью из-за того, что экземпляров класса может быть...

Ошибка при работе программы - C++
Здравствуйте! У меня такая проблема, вылетает программа. Она работает, компилируется, данные вводятся, но когда я перехожу к выводу перечня...

Ошибка при работе с ifstream - C++
есть вот такой код и я точно знаю что у меня проблема вот тут: std::ifstream i1("s1"), i2("s2"); помогите исправить. #include <conio.h> ...

6
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
06.01.2008, 17:20 #2
А ты не думаешь, что у ткебя цикл while крутиться до тех пор пока ты не отпустишь клавишу, а так как нажатие оно всгеда имеет некоторую продолжительность, вот ты и получаешь этот эффект?
Или, по идее, это должно обрабатываться драйвером клавиатуры? Но ты используешь прямое чтение с портов...

С уважением, Владимир
0
MKGA
0 / 0 / 0
Регистрация: 05.09.2007
Сообщений: 7
06.01.2008, 17:39  [ТС] #3
нет, ты неправ. Даже если перед оператором switch вставить getch()
функц. printf вызывается 2-3 раза
0
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
06.01.2008, 18:08 #4
Может дребезг?

Извини, ничем не могу помочь, я с такой проблемой не сталкивался.

Удачи, Владимир
0
ovalroom
16.01.2008, 17:46 #5
Ты читаешь прямо из порта, а потом зачем-то очищаешь буфер клавиатуры. Но значение порта-то при этом не изменится! Можешь хоть сто раз писать нули в ячейку памяти 0:41А, но при этом из порта по адресу 0х60 упорно будешь считывать код последней нажатой клавиши. Под дебагером программа будет проходить один раз - и это тоже естественно. Если ты ее будешь проходить по шагам - из порта 0х60 при этом будут считываться значения кода клавиши, которой шагаешь. Обычно дебагеры стараются восстановить все изменения в системе перед тем как передать управление обратно в отлаживаемую программу. Но в данном случае это невозможно - в порт физически нельзя записать что-то софтверно.
Igor Soukhov
0 / 0 / 0
Регистрация: 06.01.2008
Сообщений: 62
17.01.2008, 11:42 #6
господа время ДОС прошло - пользуйте апишные функции что бы узнать кто где у вас что нажал.

GetAsyncKeyState, GetKeyboardState, etc

Igor Soukhov, www.rsdn.ru
0
MKGA
0 / 0 / 0
Регистрация: 05.09.2007
Сообщений: 7
17.01.2008, 17:06  [ТС] #7
апи функции это конечно понятно, и спасибо, что они есть. Но ведь интересно же с портами работать? вопрос:'как это работает, интересует меня с детства'. да и спросить нет греха.

С уважением Артур С.
0
17.01.2008, 17:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2008, 17:06
Привет! Вот еще темы с ответами:

Ошибка при работе со структурой - C++
#include <iostream.h> #include <conio.h> #pragma argsused float v; struct GOODS { unsigned quantity; float price;}; ...

Ошибка при работе с файлами - C++
Необходимо, создать текстовый файл со случайным именем в диапазоне 8 символов, латиница. Вот код: int main() { ...

Ошибка при работе со структурами - C++
#include <iostream> #include <cstdlib> using namespace std; typedef struct slist_ { long val; struct slist_ *next; ...

Ошибка при работе с файлом - C++
Пытался разобраться с записью и чтением из файла, посмотрел с десяток тем здесь, но столкнулся со странной (для меня) ошибкой. Вот,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru