繁体   English   中英

从串口读取N个字节

[英]Read exactly N bytes from serial port

如何从串口读取N个字节? 我需要阻塞我的线程,直到端口上至少有N个字节可用或预设的时间已过期。 在运行时期间,timout值和N都应该是可变的。

注意:在使用C / C ++的Linux上使用或不使用boost。

为此目的,termios中有VMIN属性。 当没有足够的可用字节时,它可用于防止read()返回。

例:

tcgetattr( fd, &termiosv );

termiosv.c_cc[VMIN]  = N;
termiosv.c_cc[VTIME] = 20;

tcsetattr( fd, TCSANOW, &termiosv );

有关VMIN的更多信息

注意:它对select() :当只有1个字节可用且VMIN> 1时,Select表示fd可读性。

不幸的是,正如Hans所暗示的那样,仅通信字节流的通信通道通常没有任何魔术调用来阻止字节进入协议单元 - 您必须自己完成。 这并不困难。

同样的超时。 COM端口驱动程序通常具有超时,当在某个时间间隔内没有接收到任何字节时会触发该超时,但这不会超出任何比这个字节更复杂的协议单元。 如果我需要做类似的事情,我通常使用一个接收字节的线程并组装协议单元对象,直到它们完整并经过完整性检查,然后将它们推送到PC队列。 另一个线程在超时时等待队列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM