vxworks串口读取超时

vxworks serial port read timeout

我正在使用安装在 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

我该如何解决这个问题才能从串行端口正确读取。

你没有检查是否打开串口成功

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');