1

次のコードを理解しようとしています。

#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、10 進数で 255 で、ポート 1 またはポート 0 (を使用outb()) に書き込みます。0 を書き込んでいるのになぜ 255 なのか理解できません。

4

2 に答える 2

5

inb(0x378) を実行した結果は、ハードウェアに依存します。一部のチップは、outb で以前に書き込んだ値を返しますが、他の一部のチップはゴミを返すだけです。いずれにしても、接続されている可能性のあるデバイスからバイトを読み取るためのポートではありません。

于 2012-03-17T15:40:09.213 に答える
-1

最初に、ポートが入力または出力、あるいはその両方としてどのように動作するかを確認してください!!! ..両方として構成できる場合は、それぞれのモードに設定する必要があります。正しい動作を期待できるのはあなただけです。

于 2012-03-19T11:45:53.583 に答える