我正在使用安装在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
如何修复此问题以正确读取串行端口。
答案 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');