我目前正在从事一个项目,该项目将通过串行通信从微控制器读取数据。
截至目前,该程序(在我的计算机上)打开一个/dev/tty*
文件并能够读取/写入它。微控制器将n
随时发送一个字节包。我想知道是否有任何方法可以告诉我何时将所有字节写入文件?
我一直在研究select()
andpoll()
函数,但它们似乎只能判断一个字节何时准备好,而不是何时写入每个字节。
任何帮助表示赞赏。谢谢!
如果你n
是硬编码的,你可以这样做(使用伪代码):
received_data = offset_from_last_round
while( received_data < n )
{
use select() for waiting data to arrive
read() all data you can, dont forget to check buffer oveflow here
received_data += how much data was red
}
full_message = buffer[ 0 ... N - 1 ]
offset_to_next_round = buffer[ N .. received_data ]
如果n
没有硬编码,您需要执行@Golgauth 建议的操作,或者在您的消息中添加一些“传输结束”序列/字节(如果您有二进制文件/数据要传输,这很棘手)。简而言之:您需要某种协议。
嗯,这个想法是你的二进制文件应该以一些字节开始,这些字节实际上给出了接下来必须读取的大小。
这实际上是我们在这里进行的讨论(这是关于如何解释raw PCM wav
声音文件,但这是同一点:获取N
样本数,以确定接下来要读取多少块以获取关注的文件到完整性)。