我尝试读出一个串行设备。我正在研究Ubuntu 12.04。设备以相等的时间距离发送一些比特。
我通过Hterm连接到设备,我可以看到正确输入的数据。
如果我通过linux命令cat读出设备,则会丢失几个Bits。
我的第三种方法是写一个小C文件
struct termios options;
int main(void)
{
int fd; /* File descriptor for the port */
fd = open(DEVICE, O_RDWR | O_NONBLOCK);
if (fd < 0)
{
/*
* Could not open the port.
*/
perror("open_port: Unable to open /dev/ttyACM3 - ");
}
fd_set read_fds, write_fds, except_fds;
FD_ZERO(&read_fds);
FD_ZERO(&write_fds);
FD_ZERO(&except_fds);
FD_SET(fd,&read_fds);
struct timeval timeout;
timeout.tv_sec = 10;
timeout.tv_usec = 0;
if(select(fd + 1, &read_fds, &write_fds, &except_fds, &timeout) == 1){
char replay[DEBUG_REPLAY_MAX_SIZE];
memset(replay, 0x00, DEBUG_REPLAY_MAX_SIZE);
read(fd, &replay, DEBUG_REPLAY_MAX_SIZE);
printf("Daten: %s", replay);
}
else{
puts("Timeout");
}
return (fd);
}
此代码应执行以下操作: - 打开串行设备并返回文件描述符 - 函数select()等待最长时间为10秒,并且会在
中提交一些数据但是如果我执行c文件不等待10秒,但只打印“Daten:”而没有以下数据。真奇怪。
有人可以解释这种行为吗?
非常感谢,
弗洛里安