在I / O端口上读写

时间:2012-03-17 14:23:41

标签: c embedded hardware-port

我想了解以下代码:

#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())。我无法理解为什么当我写0时它是255。

2 个答案:

答案 0 :(得分:5)

执行inb(0x378)的结果取决于硬件。一些芯片返回你之前用outb写的值,而其他一些芯片只返回垃圾。在任何情况下,是从可能连接的设备读取字节的端口。

答案 1 :(得分:-1)

首先看看,端口如何表现,作为输入或输出或两者!!! ..如果它可以配置为两个..你必须设置为相应的模式然后只有你可以期待正确的行为.. < / p>