기금넷 공식사이트 - 주식 지식 - 영웅 여러분, 데이터를 수신하는 직렬 포트를 확인하기 위해 Linux에서 프로그램을 작성했습니다. 직렬 포트를 여러 번 읽어야 한다는 것을 알았습니다.

영웅 여러분, 데이터를 수신하는 직렬 포트를 확인하기 위해 Linux에서 프로그램을 작성했습니다. 직렬 포트를 여러 번 읽어야 한다는 것을 알았습니다.

우선, 기본 직렬 포트 파일 캐싱 방법은 버퍼링이 없습니다. 둘째, 데이터를 보낼 때 직렬 포트가 연속적이지 않습니다.

예를 들어 직렬 포트는 0x62, 0x77을 제공해야 합니다. 그런 다음 먼저 0x62를 보낸 다음 0x77을 보냅니다. 그리고 그가 0x62를 보낸 직후에 읽으면 0x62만 얻게 되고 0x77을 다시 읽어야 합니다.

한번에 읽으시려면 두 가지 방법이 있습니다.

1: 직렬 포트를 직접 읽는 함수를 작성하고 그 안에서 read를 호출하세요.

예:

inttipc_read_socket( int sockfd, char * buf, int len ​​)

{

int count = 0; //매번 읽는 바이트 수

int pos = 0 //합계 ** * 읽기 바이트 수

pos = 0;

do {

count = read(sockfd, &buf[pos], len - pos);

//printf("tipc_read_socket:count[%d]\n", count);

if( 0 > count )

{

if( EINTR == errno )

continue;

//비 블록으로 설정하면 처음으로 모든 데이터를 읽은 후 두 번째 결과는 다음과 같습니다. -1.

return( pos );

}

if( 0 == count ) break; /* 아무것도 남지 않았습니다!

pos += count;

} while( len > pos );

return( pos );}

2: 입력 출력을 설정합니다. 속성.

struct termios newtio;

bzero( &newtio, sizeof( newtio ) )

newtio.c_cc[VTIME] = ***;

newtio.c_cc[VMIN] = ***;

tcsetattr(fd,TCSANOW,&newtio);

여기에는 VTIME 및 VMIN이 있습니다. 독서를 기다리는 시간이다.

설정한 후, 예를 들어 0x62를 읽으면 설정한 시간 동안 대기하게 되며, 이 시간 동안 0x77이 오면 0x62와 0x77을 함께 반환하게 됩니다. 이 시간은 전송 속도와 관련이 있으며 특정 전송 속도에서 두 개의 연속 바이트 사이의 최대 간격으로 설정되어야 합니다.