2016-08-04 3 views
1

UEIPAC 600 1-G 상자에 vxworks가 설치되어 있습니다. 직렬 포트에서 데이터를 읽으려고합니다. 이것은 내 코드입니다. 내가 키보드 입력을 칠 때까지 그것은 단지 시간 실행 vxworks 직렬 포트 읽기 시간 초과

void read_serial(int n){ 
/* store number of bytes read = int n*/ 
int num=0; 
/* hold the file descriptor */ 
int fd = 0; 
/* dev name from iosDevShow output */ 
char dev_name[] = "/tyCo/0"; 
/* buffer to receive read */ 
char re[n]; 
/* length of string to read */ 
int re_len = n; 
/* open the device for reading. */ 
fd = open("/tyCo/0", O_RDWR, 0); 
num = read(fd, re, re_len); /* read */ 
close(fd); /* close */ 
printf("number of bytes read %d\n",num); /* display bytes read*/ 
printf("displaying the bytes read: %s\n",re); 
} 

는 내가 제대로 직렬 포트에서 읽을이 문제를 해결하려면 어떻게 그렇게

number of bytes read 1 
displaying the bytes read: 
Pp 

처럼 출력합니다.

+1

'fd = open (...) '에서 어떤 값이 반환 되었습니까? 당신은 * 이것을 확인하고, 맹목적으로 수행하지 않아야합니다. 나는 또한'char dev_name [] = "/ tyCo/0"의 요점은 무엇인지 궁금하다. '네가 열어도 사용하지 않으면. 그리고'printf'에 보내기 전에're'의 끝에'nul' 터미네이터를 넣었습니까? 팁을위한 –

답변

1

직렬 포트를 성공적으로 열 었는지 확인하지 않습니다.

fd = open("/tyCo/0", O_RDWR, 0); 
if (fd < 0) { 
    /* handle the error */ 
} 

직렬 포트에서 읽음이 성공했는지 확인하지 않습니다.

num = read(fd, re, re_len); /* read */ 
if (num < 0) { 
    /* handle the error */ 
} 

직렬 포트에서 읽는 것이 인쇄 가능한 문자열로 표시된다고 가정합니다.이 문자열은 정확하지 않을 수 있습니다. 직렬 포트에서 읽은 데이터를 인쇄 할 때 추출한 바이트 값을 확인할 수 있도록 데이터를 16 진수로 덤프해야합니다.

for (int i = 0; i < num; ++i) { 
    printf(" %02x", re[i]); 
} 
putchar('\n'); 
+0

thx –

관련 문제