有没有办法查询串口可用的数据量?
Is there a way to inquire the amount of data available at a serial port?
我刚开始研究串行数据采集,想知道是否有一种方法可以检查给定端口是否有数据可用,如果有的话是多少?
更具体一点:如果有人研究过 Arduino 上的编程,可以很容易地检查是否可以通过调用(来自 Arduino API):
if(Serial.available() > 0) { ... }
这样一来,就可以避免可能阻塞的 read() 调用,并在需要或需要时简单地读取数据。
但是考虑到相反的情况:"A program is checking for serial sent from the Arduino",到目前为止,我所看到的在 C 中实现类似功能的唯一方法是通过设置 [=11] 来控制 read() 的行为=] 属性 VMIN
和 VTIME
到特定值。但这并不是我真正想要的……我不想要一个非阻塞的 read()-调用或一个只在数据可用时才阻塞的 read()-调用。我想知道 IF 有数据要读取,甚至在尝试读取之前,如果是这样 HOW MUCH 可以读取数据(当前)来自连续剧。
使用 FIONREAD
ioctl。
int nread;
ioctl(Serial, FIONREAD, &nread);
if (nread > 0) {
...
}
我刚开始研究串行数据采集,想知道是否有一种方法可以检查给定端口是否有数据可用,如果有的话是多少?
更具体一点:如果有人研究过 Arduino 上的编程,可以很容易地检查是否可以通过调用(来自 Arduino API):
if(Serial.available() > 0) { ... }
这样一来,就可以避免可能阻塞的 read() 调用,并在需要或需要时简单地读取数据。
但是考虑到相反的情况:"A program is checking for serial sent from the Arduino",到目前为止,我所看到的在 C 中实现类似功能的唯一方法是通过设置 [=11] 来控制 read() 的行为=] 属性 VMIN
和 VTIME
到特定值。但这并不是我真正想要的……我不想要一个非阻塞的 read()-调用或一个只在数据可用时才阻塞的 read()-调用。我想知道 IF 有数据要读取,甚至在尝试读取之前,如果是这样 HOW MUCH 可以读取数据(当前)来自连续剧。
使用 FIONREAD
ioctl。
int nread;
ioctl(Serial, FIONREAD, &nread);
if (nread > 0) {
...
}