시리얼 포트를 열어보자.

 

 리눅스에서 입출력은 모두 파일로 간주되어 처리된다. 키보드 입력 화면 출력도 0,1 번 파일디스크립터를 이용하고, 통신 IO인 소켓도 아래와 같이 파일디스크립터인 int로 받아 동작을 제어한다. 소켓의 파일 디스크립터를 printf로 출력해보면 해당 파일디스크립터가 몇번인지 출력할 수도 있다. 어디에서 쓰고 읽을 것인지를 int로 처리하고 있다고 볼 수 있다.

 

int sock = socket(PF_INET,SOCK_STREAM,0); // 소켓도 그냥 int 값의 파일 디스크립터다

 

즉, 유닉스 기반 OS에서 입출력에 관련된 모든 작업은 파일을 통해 가능하다. 이 입출력장치에는 네임드 파이프, 소켓같은 통신 IO와 진짜 파일로 저장하기 위한 IO 장치 등이 포함 된다. 시리얼 통신 포트도 예외는 아니다. 다만 윈도우에서는 파일 디스크립터와 유사한 핸들이라는 것을 사용하는 것만 다를 뿐, 위에서 설명한 것과 동일하게 시리얼 통신포트를 열 수 있도록 CreateFile이라는 함수를 제공한다.

 

CreateFile 함수의 원형은 아래와 같다.

 

 

각 인자들에 대한 설명을 하자면..

 

lpFileName : 파일 이름. 시리얼 COM포트 같은 경우 \\.\COM1과 같은 형식을 따른다.

dwDesiredAccess : 파일 권한이다. 읽고쓰기가 가능하게 하려면 아래와 같이 쓰면 된다.

                             GENERIC_READ | GENERIC_WRITE

dwshareMode : 시리얼 통신에서는 포트를 공유할 수 없으니까 0이다.

lpSecurityAttributes : 정확히는 모르겠으나 사용하지 않는다.

dwCreateDisposition : 파일의 생성 방식이다. 시리얼 통신은 이미 있는 포트를 여는 거니까

                                OPEN_EXISTING 을 사용한다.

dwFlagsAndAttributes : 파일 속성에 대한 의미다. 우리는 Overlapped 읽기 쓰기를 사용 하

                                  기때문에 FILE_FLAG_OVERLAPPED를 넣으면 된다.

hTemplateFile : 뭔지 모르겠지만 사용하지 않아 0을 넣는다.


 

 

그런데, 사실 FILE_ATTRIBUTE_NORMAL은 단독으로 사용되는 것 이외에는 효력이 없다고 하니 FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED 는FILE_FLAG_OVERLAPPED와 같은 말이다. 

 

어찌 됐든 위와 같이 타이핑하면 일단 가지고 놀 시리얼 포트를 열 수 잇다.

(물론 COM 포트 번호는 제어판 -> 장치관리자 에서 확인해서 넣어야 한다.)

 

자세한 함수 인자들에 대한 명세는 아래를 참조하면 알 수 있다.

 

 

 

 

 

 

 

Posted by 굿쟌
,

Overlapped 시리얼 통신은 비동기 통신을 의미한다. 일반적인 함수와 같이 시리얼 통신에 파일쓰기 읽기 명령을 내리면 함수가 내부 처리과정을 마칠 때까지 전체 시스템은 블록되며 처리과정을 마치면 처리결과가 return 된다. 반면에 Non-Overlapped 시리얼 통신의 경우 호출 즉시 쓰기 혹은 읽기 함수는 return 되며 전체 프로그램은 진행된다. 대신 함수 내부 과정이 모두 마치게 되면 미리 지정해 놓은 Event가 set된다.

 

Overlapped - Syncronous Function

Non-Overlapped - Asyncronous Function

Posted by 굿쟌
,

보 레이트는 초당 의미있는 정보의 전송갯수를 의미한다. 반면 비트레이트는 초당 전송되는 비트수를 의미한다. 예를 들어 9600 bps의 비트레이트로 아스키코드(1 byte = 8 bit)정보를 전송하는 경우 9600 bit / 8 bit = 1200 즉, 1200개의 아스키 코드를 표현 할 수 있는 정보 단위를 전송 할 수 있다. 따라서 9600 bps는 1200 baud rate라고 할 수 있다. 반면에 9600 bps의 전송속도로 bit 를 전송하는 경우에는 보레이트가 비트레이트와 같은 9600 baud rate가 된다.

 

보 레이트 - 초당 의미있는 정보의 전송량

비트레이트 - 초당 비트 전송량

Posted by 굿쟌
,