본문 바로가기

정리글

시리얼 통신

그래도 소프트웨어 개발자라고 회사에 들어가서 일하고 있으니 어디 한번 개발에 관한 일이라도 써보자.

2년이 지났고 한 프로젝트 참여도 하고 있긴 하다만, 아직도 코드를 짜는걸 보면 중구난방으로 짜고 있다.

업무는 대부분 시리얼 통신으로 데이터 주고받기다.

서버에 업로드를 하기 위한 통신 모듈도, 아래에 붙어 있는 장치도 전부 시리얼 통신으로 제어한다.

물론 장비에 Ethernet 포트도 달려있으니 LAN으로 연결한다면야 서버 통신을 TCP로 하기도 한다.만 최근에는 대부분 무선통신모듈을 사용하는터라 어쨌든 시리얼이다.

장치의 커널 UART Driver 가 시리얼 콘솔을 /dev/tty 와 연결하면 C++ 어플리케이션에서 그걸 사용한다.

커널을 만진 경험이 적어서 아직도 잘 알진 못한다. 그저 사용할 뿐.

사용은 그리 어렵지 않다. open 이나 fopen으로 열어서 read/write로 통신하는것.


void *recv()

{

    int fd = open(”/dev/ttyO1″, O_RDWR);

    while(1)

    {

        int n = read(fd, &c[0], 1);

    }

}

 

int send(char* msg, int num)

{

     int w = write(fd, msg, num);

}


보통 보내는 것은 필요할 때 write 하지만, 받는 것은 pthread로 별도 쓰레드를 만들어 데이터가 들어올 때 마다 계속 읽도록 만들었다.

데이터가 언제 들어올지 알 수 없으니 계속 읽도록 한다.