linux 시리얼 통신 도중 문제가 생깁니다.
글쓴이: rkakdrhfi / 작성시간: 화, 2018/01/23 - 5:26오후
fd = OpenSerial(devName,baud,0,1); if(fd < 0 ) return -2; printf("Opend %s device\n",devName); sData.mode = 0x03; sData.type = 0; sData.number = 20; sData.data = writeData; sleep(1); buf[0]=0x01; buf[1]=0x03; buf[2]=0x00; buf[3]=0x00; buf[4]=0x00; buf[5]=0x14; buf[6]=0x45; buf[7]=0xC5; printf("Data sending test start....\n"); for(idx=0;idx<10;++idx){ count = 0; //WriteData(fd,&sData); printf("He"); write(fd,buf,8); printf("llo"); while(count<45){ usleep(1000); printf("received data: "); rdcnt = read(fd,rxBuf+count,sizeof(rxBuf)); printf("%2d_%2d\n",rdcnt,count); if(count == rdcnt+count){ break; } count = rdcnt+count; } rxBuf[count] = '\0'; printf("<%s rd=%2d> %s\n",devName, count,rxBuf); printf("I will sleep 100ms\n"); usleep(100*1000); printf("I waked up\n"); } printf("Data sending test end....\n"); CloseSerial(fd);
int OpenSerial(char* devName, int baud, int vTime, int vMin) { int fd; struct termios newtio; fd = open(devName, O_RDWR | O_NOCTTY); if( fd < 0 ) { printf("Can`t open Device"); return -1; } tcgetattr(fd,&oldtio); memset(&newtio, 0, sizeof(newtio)); newtio.c_iflag = IGNPAR; newtio.c_oflag = 0; newtio.c_cflag = CS8 | CLOCAL | CREAD; switch( baud ) { case 115200 : newtio.c_cflag |= B115200; break; case 57600 : newtio.c_cflag |= B57600; break; case 38400 : newtio.c_cflag |= B38400; break; case 19200 : newtio.c_cflag |= B19200; break; case 9600 : newtio.c_cflag |= B9600; break; case 4800 : newtio.c_cflag |= B4800; break; case 2400 : newtio.c_cflag |= B2400; break; default : newtio.c_cflag |= B115200; break; } newtio.c_lflag = 0; newtio.c_cc[VTIME] = vTime; newtio.c_cc[VMIN] = vMin; tcflush( fd, TCIFLUSH); tcsetattr( fd, TCSANOW, &newtio); return fd; } void CloseSerial(int fd) { tcsetattr(fd,TCSANOW,&oldtio); close(fd); }
현재 코드 상태는 이렇습니다. 프로그램 동작시 로그 내용은
Opend /dev/ttyUSB0 device Data sending test start.... Helloreceived data: 1_ 0 received data: 12_ 1 received data: 12_13 received data: 11_25 received data: 9_36 </dev/ttyUSB0 rd=45> I will sleep 100ms I waked up Helloreceived data: 11_ 0 received data: 12_11 received data: 11_23 received data: 11_34 </dev/ttyUSB0 rd=45> I will sleep 100ms I waked up Helloreceived data: 10_ 0 received data: 11_10 received data: 12_21 received data: 11_33 received data: 1_44 </dev/ttyUSB0 rd=45> I will sleep 100ms I waked up Helloreceived data: 8_ 0 received data: 11_ 8 received data: 12_19 received data: 14_31 </dev/ttyUSB0 rd=45> I will sleep 100ms I waked up Helloreceived data: 6_ 0 received data: 11_ 6 received data: 12_17 received data: 11_29 received data: 5_40 </dev/ttyUSB0 rd=45> I will sleep 100ms I waked up Helloreceived data: 4_ 0 received data: 12_ 4 received data: 11_16 received data: 12_27 received data: 6_39 </dev/ttyUSB0 rd=45> I will sleep 100ms I waked up Helloreceived data: 3_ 0 received data: 11_ 3 received data: 12_14 received data: 11_26 received data: 8_37 </dev/ttyUSB0 rd=45> I will sleep 100ms I waked up Helloreceived data: 1_ 0 received data: 11_ 1 received data: 12_12 received data: 11_24 received data: 10_35 </dev/ttyUSB0 rd=45> I will sleep 100ms I waked up
이렇게 나옵니다. 마지막 출력에서 I waked up 다음 멈추더라도 시리얼 통신 write전에 He 출력 후 write에서 멈추지 않을까 싶은데 바로 멈춰서 당황스럽네여... 혹시 이러한 멈춤 현상에 대해 해결방법이나 어디서 문제가 생기는지 궁금합니다.
Forums:
댓글 달기