시리얼통신에서의 질문 드립니다..
글쓴이: cdcmp / 작성시간: 화, 2004/08/31 - 12:11오전
안녕하세요..
시리얼 확장기로 시리얼 통신을 하고 있습니다..
tx버퍼로 어떤 문자열을 날리면 rx 버퍼에서 그걸 읽고 파일로 출력하는 프
로그램인데요..
그런데 파일을 출력해보면 아무런 데이터도 출력이 되지를 않습니다..
이와 비슷한 질문을 저번에 드렸었거든요..
그러나 제가 코드를 바꿔서 다시 해보니까 결과가 같아서...
코드는 다음과 같습니다...
#include <stdio.h> #include <fcntl.h> #include <termios.h> char BUFF[10] = "abcdefghij"; char *dev[8] = {"/dev/ttyMP0","/dev/ttyMP1","/dev/ttyMP2","/dev/ttyMP3","/dev/ttyMP4","/dev/ttyMP5","/dev/ttyMP6", "/dev/ttyMP7",}; void main(void) { int fd[8]; int i,j,no; struct termios term; char *buf[4096]; printf("\nEnter the number of card to test(1~4)"); scanf("%d",&no); for(i=0;i<no*8;i++) { if((fd[i] = open(dev[i],O_RDWR|O_NONBLOCK))<0) { printf("file open error\n"); } tcgetattr(fd[i],&term); term.c_cflag=(CS8+B57600+CREAD+CLOCAL+HUPCL); term.c_lflag &= ~ECHO; tcsetattr(fd[i],TCSANOW,&term); } while(1) { for(i=0;i<no*8;i++) { write(fd[i],BUFF,8); read(fd[i],buf,sizeof(buf)); printf("%s\n",buf); } } }
제가 사용하는 시리얼 확장기는 시리얼포트가 ttyMP0~ttyMP7까지 잡혀있
습니다..
BUFF의 abcdefghij 의 문자열을 시리얼 포트의 rx핀과 tx핀을 연결하여 tx
에서 보낸 abcdefghij 이라는 문자열을 바로 rx의 buf에서 읽어 오도록 하였
습니다..
그런데 buf의 값을 출력해보면 아무런 데이터가 없어서요...
전에 어떤 분께서 가르쳐 주신 ttyS0와 ttyS1 두개를 사용해서 해보기도 했
는데...결과가 똑같았습니다..
read하는 부분에서 잘못 됐는지...알수가 없네요....
고수님들의 답변 부탁드리겠습니다...^^
수고하세요...
Forums:
NONBLOCK을 빼고, read의 리턴값과 errno 를 체크해보세요.
NONBLOCK을 빼고, read의 리턴값과 errno 를 체크해보세요. 지금은 NONBLOCK이 문제인 것 같군요.
NONBLOCK을 빼니까 동작을 하지 않네요....그리고 read
NONBLOCK을 빼니까 동작을 하지 않네요....
그리고 read의 리턴 값을 보니까 -1이 나오던데...
이 -1이 어떤 값을 의미 하는지....모르겠네요...
너무 초보라서....이해가 안가는 부분이 많아서요....
답변 감사합니다...^^
제가 사용하고 있는 세팅입니다. flow control 사용하지 않고 T
제가 사용하고 있는 세팅입니다. flow control 사용하지 않고 TX/RX 만 사용합니다.
멀티포트 장비들은 RTS/DTE 등등의 핀들을 처리해야만 동작할 가능성이 큽니다.
일단 테스트 해보시지요. 이상 허접이었습니다. ^^;
write 하는 부분은 어디 있죠?그리고 터미날에서[code:1]
write 하는 부분은 어디 있죠?
그리고 터미날에서
cat /dev/ttyMP0
또 하나의 다른 터미날에서
echo 'a' > /dev/ttyMP0
이렇게 해서 먼저 하드웨어적인 검증 을 하고 된다면 그다음에 코드에대한
검증을 해보세요..
얼핏 보기에는 리드를 먼저 하고 있는 상황에서 라이트를 해야 데이타를 읽어 들일 수 있는데, 순서가 맞지 않는 듯 합니다.
손님께서 가르켜 주신 방법으로 먼저 하드웨어 검증을 하였습니다...
손님께서 가르켜 주신 방법으로 먼저 하드웨어 검증을 하였습니다...
cat /dev/ttyMP0
또다른 창에서 echo 'a' > /dev/ttyMP0 하니까 다른 창에서 a라는 문자를
출력 하네요...그렇다면 하드웨어적으로 검증은 된거 같은데요..
그렇다면 프로그래밍 문제인가..??
답변 감사드립니다..
댓글 달기