Чтение и запись на порты ввода / вывода
Я пытаюсь понять следующий код:
#include<stdio.h>
#include<stdlib.h>
#include<sys/io.h>
#define baseport 0x378
int main()
{
int b;
if(ioperm(baseport,3,1))
{
perror("ioperm");
exit(1);
}
outb(0,baseport);
usleep(1000000);
printf("\n the status: %x,\n",inb(baseport));
if (ioperm(baseport,3,0)) {perror("ioperm"); exit(1);}
exit(0);
}
Вывод 0xff, 255 в десятичном виде, пишу ли я на порт 1 или порт 0 (используя outb()
). Я не могу понять, почему это 255, когда я пишу 0 к нему.
2 ответа
Решение
Результат выполнения inb(0x378) зависит от оборудования. Некоторые чипы возвращают значение, которое вы написали ранее с помощью outb, а некоторые другие чипы просто возвращают мусор. В любом случае, это не порт для чтения байтов с потенциально подключенного устройства.
Во -первых, посмотрите, как может вести себя порт, как вход или выход или оба!!!.. если он может быть настроен как оба.. вы должны установить соответствующий режим, тогда только вы можете ожидать правильного поведения..