RS232 통신에서 Canonical 전송시~~
글쓴이: phoino20 / 작성시간: 월, 2003/09/01 - 11:50오전
Canonical 전송시 Write부분이 이상한것 같아서 이렇게 문의 드립니다.
일단 소스는 아래와 같구요~~
전송시 값이 안넘어 가거나 이상한 값으로 인식 그리고 한꺼번에 나오는등
이상해서요~~
코드는 아래와 같습니다...
#define BAUDRATE B38400 #define MODEMDEVICE "/dev/ttyS0" #define _POSIX_SOURCE 1 #define FALSE 0 #define TRUE 1 volatile int STOP=FALSE; main() { int fd, c, res, i; struct termios oldtio,newtio; char buf[255]; fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NDELAY); if(fd < 0){ perror(MODEMDEVICE); exit(-1); } tcgetattr(fd, &oldtio); bzero(&newtio, sizeof(newtio)); newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD; newtio.c_iflag = IGNPAR | ICRNL; newtio.c_oflag = /*OPOST | OCRNL*/0; newtio.c_lflag = ICANON; newtio.c_cc[VINTR] = 0; newtio.c_cc[VQUIT] = 0; newtio.c_cc[VERASE] = 0; newtio.c_cc[VKILL] = 0; newtio.c_cc[VEOF] = 4; newtio.c_cc[VTIME] = 0; newtio.c_cc[VMIN] = 1; newtio.c_cc[VSWTC] = 0; newtio.c_cc[VSTART] = 0; newtio.c_cc[VSTOP] = 0; newtio.c_cc[VSUSP] = 0; newtio.c_cc[VEOL] = 0; newtio.c_cc[VREPRINT] = 0; newtio.c_cc[VDISCARD] = 0; newtio.c_cc[VWERASE] = 0; newtio.c_cc[VLNEXT] = 0; newtio.c_cc[VEOL2] = 0; tcflush(fd, TCIFLUSH); tcsetattr(fd, TCSANOW, &newtio); while(STOP == FALSE){ printf("Input : "); scanf("%s", buf); res = send(fd, buf, 255, 0); buf[res] = 0; printf("W_BUF : %s | W_RES : %d\n\n", buf, res); if(buf[0] == 'z') STOP = TRUE; } tcsetattr(fd, TCSANOW, &oldtio); }
Forums:
serial 통신에 send 써도 상관이 없는건가요? (이건 제가 오히려
serial 통신에 send 써도 상관이 없는건가요? (이건 제가 오히려 질문하는겁니다.)
man page에는 send a message from a socket라고 되어 있는데요.
소켓도 그렇고 시리얼도 그렇고 write를 쓰시면 됩니다.
그리고 buf를 키보드로부터 입력받지 마시고 임의의 문자열을 보냈을 때 결과가 어떻게 되는지 확인해보세요.
그럼.
별은 바라보는 자에게 빛을 준다.
Write로 했고요 buf에 문자열을 넣어서 해봤는데 안넘어 가네요;
Write로 했고요 buf에 문자열을 넣어서 해봤는데 안넘어 가네요;
먼가 다른 방법은 없는건가요?
흠.. 통신 설정하는 부분옵션을 좀 고치니까 가긴 가는데 처음 입력만 제
흠.. 통신 설정하는 부분옵션을 좀 고치니까 가긴 가는데 처음 입력만 제대로 가고 그 담부터는 계속 이상한 문자로 받는군요. 거기다 버퍼가 255로 잡혀 있는데도 10단어 이상 정도 넣으면 받는 쪽에서 멈춰 버리는 군요.(받는 쪽은 위와 거의 같은데 read로 받는 것만 달라요.)
댓글 달기