가우디 자유게시판, 시리얼 통신
페이지 정보
본문
시리얼 통신
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
--- 아래는 블로그 포스트 내용들입니다. 위의 바로가기를 클릭하면 아래 내용을 볼 수 있습니다. ---
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
관련링크
- 이전글가우디 자유게시판, 스무살에 알았더라면 좋았을 것들 20.05.09
- 다음글가우디 자유게시판, SNS가 만든 스타 최나영 20.05.09
댓글목록
등록된 댓글이 없습니다.