2012-03-17 6 views
1

I/O 포트에 쓰기 :읽기와 나는 다음과 같은 코드를 이해하려고

#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가, 내가 포트 1 (outb() 사용) 포트 0에 쓰기 여부 진수 255. 0을 써야 할 때 왜 255인지 이해할 수 없습니다.

+0

그 포트 뒤에 있어야 할 것이 무엇이며 0xFF가 아닌 다른 것을 돌려 주어야합니까? – Mat

+0

@mat 그것의 병렬 포트 나는 아무 것도 붙이지 않았다 – karan421

+2

0x378은 입력 포트가 아니라 출력 포트이다. –

답변

5

inb (0x378)를 수행 한 결과는 하드웨어에 따라 다릅니다. 일부 칩은 이전에 outb로 작성한 값을 반환하고 일부 칩은 그냥 쓰레기를 반환합니다. 어쨌든 이 아니고 잠재적으로 연결된 장치에서 바이트를 읽는 포트입니다.

+0

inb가 포트의 바이트를 읽지 않는다면 사용 된 것입니다. ... 내가 초보자 인 것처럼 설명하십시오 ....... – karan421

+4

@ karan - 일부 포트는 출력에 사용되는 것과 같습니다. 인쇄기. 프린터에서 무엇을 읽고 있습니까? –

+0

@BoPersson : 상태는 다르지만 다시 읽기 전용 포트 인 IIRC에 있습니다. – ninjalj

-1

먼저 포트가 어떻게 동작 할 수 있는지, 입력 또는 출력 또는 둘 모두로 동작 할 수 있는지 !!! .. 둘 다 구성 될 수 있다면 각 모드로 설정해야만 올바른 동작을 기대할 수 있습니다.