我刚开始研究串行数据采集,并想知道是否有办法检查,如果数据在给定端口可用,如果有,那么多少?
更具体一点:如果有人曾经研究过Arduino上的编程,可以通过调用(来自Arduino API)轻松检查数据是否可以从USB串行接口读取:
if(Serial.available() > 0) { ... }
这样可以避免可能阻塞的read() - 在必要或需要时调用并简单地读取数据。
然而,考虑到相反的情况:"一个程序正在检查从Arduino发送的序列号",我到目前为止看到的唯一方法是在C中实现类似的东西,就是引导通过将termios
属性VMIN
和VTIME
设置为特定值来实现read()的行为。但这并不是我想要的......我不想要一个非阻塞的read() - 调用或read() - 只在数据可用时才会阻塞。我想知道 IF 在读取之前有数据需要读取,如果是这样的话,那么 HOW MUCH 数据可以从串口读取(当前)。
答案 0 :(得分:2)
使用FIONREAD
ioctl。
int nread;
ioctl(Serial, FIONREAD, &nread);
if (nread > 0) {
...
}