LINUX串口一次不能全部读取串口内容

       菜鸟级别的问题,希望对像我一样的人有所帮助。

       我在做一个串口通信,上位机通过串口向控制板发送信号,信号的长度为23个字节。我使用Linux编程,自带的read()函数,用一个50个自己的数组来读,但是读取的字节数为8,9,13等不确定长度。不知道怎么做,想起来以前有个师兄跟我提过,单片机读取串口时,是一个字节一个字节读的,然后把读到帧头的数据,然后按照一定顺序往后读取定长的字节就好。

      我问了个员工,他跟我解释说,串口通信是要时间的,比如你先读了一次,但是那边还没发完的概率是非常大的,所以,需要开辟一个缓存区,来保存你收到的内容,你要把收到第一次之后,然后再接着读取你需要的数据长度,这样就好了。

     于是我就修改了我的代码,我每次读取的长度为8个字节,实际测试之后,可能会读到6个到8个字节,但多读几次就能都读全了。我的串口打开之后,一直在循环读取串口内容。代码如下,希望对需要的人有帮助。

char cmd_buf[23];
char rv_buf[8];
int ret_len,temp,i;
int len_sum = 0;
while(1)
	{		
		ret_len = read(cmd_com_fd,rv_buf,8);
		
		len_sum += ret_len;
		//printf("读取数据长度:%d\t数据总长度:%d\n",ret_len,len_sum);
		if(ret_len <= 0)//如果没有读取到数据继续等待读取
		{
			len_sum = 0;
			continue;
		}
		if(ret_len >0 && len_sum<23)//如果读取数据大于0,而且总长度小于23,数据拷贝,继续读
		{
			for(i=0;i0 && len_sum>=23)//如果读取数据大于0,而且总长度大于等于23,数据拷贝,往下走
		{
			for(i=0;i

 

你可能感兴趣的:(Linux编程)