RS232를 이용한 시리얼통신에서 수신측 프로그램소스입니다. 님들께 조금이나마 도움되기를 바랍니다.

토끼아빠의 이미지

안녕하세요~````
시리얼통신프로그램때문에 이틀간 혼줄이 났어요
많은 도움 주신 여러 고수님들께 감사드립니다...
인터넷상에 돌아다니는 오픈소스들을 가지고 코딩했는데...수신부분이 안되었어요
헌데 그게 무슨 문제냐 했더니 폴링문제였거든요
왜선지 select는 제대로 작동하지 않았습니다.

아래 코드가 님들께 조금이나마 도움되면 좋겠네요~~

void receive()
{
        serial_open();
        fp2 = fopen("c","wb");
        res =0;
	int cnt = 0;
 
	struct pollfd poll_events;
 
	poll_events.fd 		= fd;
	poll_events.events 	= POLLIN | POLLERR;
	poll_events.revents 	= 0;
 
	while( 1){
		res = poll( (struct pollfd*)&poll_events, 1, 1);
		if( res > 0 ){
			if( poll_events.revents & POLLIN){
				cnt = read( fd, serial_buf, 200);
				printf( "cnt = %d, buf = %s\n", cnt, serial_buf);	
			}
			else if( poll_events.revents & POLLERR){
				printf("Error \n");
				break;	
			}
		}
 
	} 
 
}

제가 직접 테스트해본 코드니 그냥 이용하셔도 별문제 없으리라 봅니다...

pleasantman의 이미지

poll도 이용을 합니다만...
FD_SET등을 사용하여
Select함수를 사용합니다.
serial program howto로 인터넷에 서치를 하시면 쉽게 찾을 수 있을 겁니다.
Select함수를 사용하여 여러개의 스트림으로 부터 멀티 입력을 받아
처리하는 프로그램을 만들 수 있습니다. 물론 입력을 없을 경우 time out도 할 수 있습니다.
아 입력 뿐만 아니라 출력도 가능하구요..
http://tldp.org/HOWTO/Serial-Programming-HOWTO/x115.html#AEN148
을 보시면 되겠네요..

김일영의 이미지

짤 일이 곧 있는데 참고해야겠네요.
올려주신 내용과 링크 감사

토끼아빠의 이미지

다소나마 님께 도움이 된다니 저로서는 정말 기쁘네요...

좋은 하루 되세요!!