我在Linux下使用c编程语言,尝试使用串口创建通信应用程序。该程序将数据发送到串行端口并从微控制器读取接收的数据。接收的数据可以达到10到64之间的任意数量的字节,但不多也不少。我使用以下代码来读写数据:
unsigned char send_bytes[] = { 0x1, 0x6, 0x2, 0xAA, 0x2, 0x3, 0xB8, 0x4 };
int w = write(fd, send_bytes, sizeof(send_bytes)); // send
char buffer[64];
int r = read(fd, buffer, sizeof(buffer)); //read data
我的问题是r
永远不会超过8个字节的数据。有谁知道为什么会这样?
提前致谢。
答案 0 :(得分:1)
也许您的操作系统只提供8个字节的串口缓冲,因此它“倾向于”以8个字节的块提供传入数据。
只要有可用数据,就重复读取。您可以在可用的系统上使用select()
。
另外,由于另一端是一个微控制器,可能比你的工作站慢很多,所以当你执行read()
时,数据可能还没有。当然,这是再次尝试的另一个原因。