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로 받는 것만 달라요.)
댓글 달기