C语言 在I/O端口上阅读

eqfvzcg8  于 2023-01-12  发布在  其他
关注(0)|答案(2)|浏览(163)

我正在尝试理解下面的代码:

#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);
}

无论我在端口1还是端口0上写(使用outb()),输出都是0xff,十进制的255。我不明白为什么当我向它写0时,输出是255。

d8tt03nd

d8tt03nd1#

执行inb(0x378)的结果取决于硬件。一些芯片返回你之前用outb写入的值,而另一些芯片只是返回垃圾。无论如何,它 * 不是 * 从潜在连接的设备读取字节的端口。

qv7cva1a

qv7cva1a2#

首先,您需要查看端口的功能,如 * 输入 输出 * 或 * 两种 *。如果可以将其配置为 * 两种 *,则必须将其设置为相应的模式,只有这样,您才能期待正确的行为。

相关问题