vxworks串口读取超时

时间:2016-08-04 19:33:43

标签: c vxworks

我正在使用安装在UEIPAC 600 1-G盒子上的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 个答案:

答案 0 :(得分: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 */
}

您假设从串口读取将导致可打印的字符串,这可能不正确。当您打印从串行端口读取的数据时,您应该以十六进制转储数据,以便确定提取的字节值。

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