我正在尝试理解下面的代码:
#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。
2条答案
按热度按时间d8tt03nd1#
执行inb(0x378)的结果取决于硬件。一些芯片返回你之前用outb写入的值,而另一些芯片只是返回垃圾。无论如何,它 * 不是 * 从潜在连接的设备读取字节的端口。
qv7cva1a2#
首先,您需要查看端口的功能,如 * 输入 、 输出 * 或 * 两种 *。如果可以将其配置为 * 两种 *,则必须将其设置为相应的模式,只有这样,您才能期待正确的行为。