Чтение и запись на порты ввода / вывода

Я пытаюсь понять следующий код:

#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, а некоторые другие чипы просто возвращают мусор. В любом случае, это не порт для чтения байтов с потенциально подключенного устройства.

Во -первых, посмотрите, как может вести себя порт, как вход или выход или оба!!!.. если он может быть настроен как оба.. вы должны установить соответствующий режим, тогда только вы можете ожидать правильного поведения..

Другие вопросы по тегам