gpt4 book ai didi

在嵌入式设备中使用 ioperm() 与端口通信

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:49 24 4
gpt4 key购买 nike

以下代码有问题。我需要它来访问端口 0x300 到 0x307,所以我这样做:

#ifdef LINUX
if(ioperm(PORT1,9,1)==-1) printf("Error in ioperm()");
#endif

其中 PORT1=0x300。

然后我这样做:

int j5inp(unsigned int addr){

#ifdef DOS
return inp(addr);
#endif
#ifdef LINUX
return inb(addr);
#endif
}

void j5outp(unsigned int addr, unsigned int val){

#ifdef DOS
outp(addr,val);
#endif
#ifdef LINUX
outb(val,addr);
#endif
}

/************/
hrd_check()
{
j5outp(PCHECK,0xAA);
if (j5inp(PCHECK)!=0xAA) return(0);
j5outp(PCHECK,0x55);
if (j5inp(PCHECK)!=0x55) return(0);

return(1);
}

其中 PCHECK=0x307。

我已经对此进行了测试,我发现我能够在发送后从端口检索值 0xAA,但是第二个 (0x55) 失败,因为 inb() 仍然返回 0xAA。

我做错了什么吗?这可能是硬件问题吗?我应该在每次调用 inb() 时尝试调用 ioperm() 函数还是应该尝试使用 iopl() ?

对了,我用的板子是研华PCM-3342

最佳答案

好吧,我猜这是那些简单消失的问题之一。我相信我纠正了一个我确信与这个问题无关的小错误。但是当我这样做时,问题就消失了。

我会更好地描述我是如何解决它的,但我真的不知道我是怎么做到的。

关于在嵌入式设备中使用 ioperm() 与端口通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11024950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com