gpt4 book ai didi

c - 逐字节读取串口数据

转载 作者:太空宇宙 更新时间:2023-11-04 04:24:20 30 4
gpt4 key购买 nike

如何逐字节读取串口数据。

我有一个源发送不同数据包大小的数据包。我正在以原始模式(非规范)读取数据。当我设置 VMIN 时,我能够获得该大小或稍大的数据包。例如:如果接收到的数据包大小为 46 字节,并且如果我将 VMIN 设置为“1”。我接收到 2 个 block 中的数据(这意味着需要 2 个读取调用来获取完整数据,其中一个读取第一个 32 个字节,下一个读取其余 14 个字节)。如果我将 VMIN 设置为 46,则会获取完整的数据包。

但这里的问题是不同的数据包大小。如果数据包大小更大(比如 70 字节),它将弄乱缓冲区和后续读取,因为它在第一次读取时读取 60+ 字节并在下一次读取时读取剩余字节。

所以我想逐字节读取数据并确定数据包的结尾。

有谁知道它是否可行。或者关于如何在一次读取操作中读取完整数据包的任何建议。

串口设置:波特率:115200没有平价。1 个停止位。8N1。无流量控制。

提前致谢。

最佳答案

处理串行数据的一个好方法是从端口读取数据 block 到缓冲区,然后从缓冲区逐字节提取。

串口读取受超时设置和传入数据流的影响,因此不能保证每次读取的字节数一致。例如,如果您知道数据包始终为 46 字节,那么您可能会考虑将 Vmin 设置为 46 并期望每次读取获得 46 字节。但是,如果发送源发送多个数据包之间没有延迟,那么您可能会得到一个数据包的全部和另一个数据包的一部分。如果发送源在数据包传输期间延迟的时间超过接收端口的超时时间,那么您将获得少于 Vmin 字节。

一定要对丢失数据的可能性进行编码。例如,假设数据包以 开头和结尾。您开始从缓冲区中提取数据,第一个字节是 ,但 49 字节后您遇到一个新数据包,但没有看到前一个数据包中的 。数据包当然也应该有一个 CRC,或者至少有一个校验和。

关于c - 逐字节读取串口数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43242628/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com