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