Чтение и запись на порты ввода / вывода - PullRequest
1 голос
/ 17 марта 2012

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

#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 ]

5 голосов
/ 17 марта 2012

Результат выполнения inb (0x378) зависит от оборудования. Некоторые чипы возвращают значение, которое вы написали ранее с помощью outb, а некоторые другие чипы просто возвращают мусор. В любом случае, это , а не порт для чтения байтов с потенциально подключенного устройства.

0 голосов
/ 19 марта 2012

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

...