가우디 자유게시판, 시리얼 통신 > Gaudi Board

본문 바로가기
사이트 내 전체검색

Gaudi Board

가우디 자유게시판, 시리얼 통신

페이지 정보

profile_image
작성자 가우디 이오이오
댓글 0건 조회 632회 작성일 20-05-09 22:40

본문

시리얼 통신

while( 1)
{
// 다른 업무를 실행
if 0 < read( fd, buf, BUF_MAX_SIZE)
{
// 수신 자료를 처리
}
}

#include
#include
#include
#include
#include
#include
#include // B115200, CS8 등 상수 정의
#include // O_RDWR , O_NOCTTY 등의 상수 정의

int main( void)
{
int fd;
int ndx;
int cnt;
char buf[1024];
struct termios newtio;
struct pollfd poll_events; // 체크할 event 정보를 갖는 struct
int poll_state;

// 시리얼 포트를 open

fd = open( "/dev/ttyS0", O_RDWR | O_NOCTTY | O_NONBLOCK ); // 디바이스를 open 한다.
if ( 0 > fd)
{
printf("open error\n");
return -1;
}

// 시리얼 포트 통신 환경 설정

memset( &newtio, 0, sizeof(newtio) );
newtio.c_cflag = B115200 | CS8 | CLOCAL | CREAD;
newtio.c_oflag = 0;
newtio.c_lflag = 0;
newtio.c_cc[VTIME] = 0;
newtio.c_cc[VMIN] = 1;

tcflush (fd, TCIFLUSH );
tcsetattr(fd, TCSANOW, &newtio );
fcntl(fd, F_SETFL, FNDELAY);


// poll 사용을 위한 준비

poll_events.fd = fd;
poll_events.events = POLLIN | POLLERR; // 수신된 자료가 있는지, 에러가 있는지
poll_events.revents = 0;


// 자료 송수신

while ( 1)
{
poll_state = poll( // poll()을 호출하여 event 발생 여부 확인
(struct pollfd*)&poll_events, // event 등록 변수
1, // 체크할 pollfd 개수
1000 // time out 시간
);

if ( 0 < poll_state) // 발생한 event 가 있음
{
if ( poll_events.revents & POLLIN) // event 가 자료 수신?
{
cnt = read( fd, buf, 1024);
write( fd, buf, cnt);
printf( "data received - %d %s\n", cnt, buf);
}
if ( poll_events.revents & POLLERR) // event 가 에러?
{
printf( "통신 라인에 에러가 발생, 프로그램 종료");
break;
}
}
}
close( fd);
return 0;
}




출처:
http://forum.falinux.com/zbxe/index.php?document_srl=405838&mid=network_programming


블로그 리치 리눅스 의 포스트입니다.

출처: 블로그 리치 리눅스 의 포스트의 내용: 바로가기
원문: 기가퍼니닷컴의 블로그 리치 (제목: 시리얼 통신): 내용 더보기
게시일: 2017-05-31|2:40 오후, 수정일: 2017-05-31|2:40 pm


--- 아래는 블로그 포스트 내용들입니다. 위의 바로가기를 클릭하면 아래 내용을 볼 수 있습니다. ---
추천4

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

Copyright © gaudi2525.com All rights reserved.