시리얼 통신

시리얼 통신

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


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

(Visited 5 times, 1 visits today)

  • 포스트에 내용이 없으면 댓글 남겨 주세요.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다


영화 다시보기 포스트:

검색을 하면 편리합니다.