우분투 시리얼 통신 질문입니다.
글쓴이: gksendbs / 작성시간: 화, 2012/10/30 - 5:03오후
아래 글이 수정이 안되서 다시 올립니다.ㅜㅜ
디바이스는 안드로이드기기인데 리눅스를 깔아놨구요
장치명은 ttyUSB0입니다.
그냥 이 디바이스로부터 들어오는 데이터를 읽기만 하면 됩니다.
그래서 저는 시리얼로 기기에서 보내는 데이터를 받고 싶은데
컴파일되고 실행도 되는데 실행하면 아무것도 뜨지 않습니다.
가만히 기다리면 segmentation fault가 뜹니다.
고수님들 도와주세요.ㅜㅜ
#include<stdlib.h> #include<stdio.h> #include<unistd.h> #include<fcntl.h> #include<string.h> #include<sys/types.h> #include<sys/stat.h> #include<sys/signal.h> #include<sys/ioctl.h> #include<sys/poll.h> #include<termios.h> int main(){ int fd,rdcnt; char cc,buf[128]; struct termios newtio; fd=open("/dev/ttyUSB0",O_RDWR|O_NOCTTY); if(fd<0){ printf("device open fail /dev/tty0"); } memset(&newtio,0,sizeof(newtio)); // newtio.c_iflag=IGNPAR; newtio.c_oflag=0; newtio.c_cflag=B115200|CS8|CLOCAL|CREAD; newtio.c_lflag=IGNPAR; newtio.c_cc[VTIME]=0; newtio.c_cc[VMIN]=1; tcflush(fd,TCIFLUSH); tcsetattr(fd,TCSANOW,&newtio); while(1) { rdcnt=read(fd,&buf,1); if(rdcnt>0){ buf[rdcnt]='\0'; printf("<%s rc=/dev/tty0>%s\n", rdcnt,buf); fflush(stdout); } } printf("Serial test end\n"); close(fd); return 0; }
Forums:
고수아니라서 죄송하고요. int
고수아니라서 죄송하고요.
뭘 말씀하시는지 모르겠어요ㅣㅠㅠ
read한 것은 printf 하라는 말씀이신가요?
저 코드는 컴파일 타임에 경고를, 런타임에
저 코드는 컴파일 타임에 경고를, 런타임에 segmentation fault 를 발생시킵니다.
똑같은 버그가 본문에 적어주신 코드에도 있습니다.
그럼 read가 잘못됐다는 것인가요?
초보자의 질문에 대답해주셔서 감사합니다.
그럼 read에서 버퍼를 읽고 버퍼의 내용을 출력하는 printf에서
rdcnt가 int인데 %s로 출력해서 segmentation fault를 하신다는 말씀이시죠?
댓글 달기