Linux串口读二进制文件读不完整,而.c和.txt文件都可以正常从串口读取
printf("readytoreceivefile...\n");tcgetattr(fd,&opt);cfmakeraw(&opt);//tcflush(fd,TCI...
printf("ready to receive file...\n");
tcgetattr(fd,&opt);
cfmakeraw(&opt);
// tcflush(fd,TCIOFLUSH);
set_Parity(fd,8,1,'n');
opt.c_cc[VTIME] = 0;
opt.c_cc[VMIN] = 1;
cfsetispeed(&opt,B115200);
cfsetospeed(&opt,B115200);
tcsetattr(fd,TCSANOW,&opt);
printf("ready for receving data...\n");
// retv = fread(hd,1,max_buffer_size,fp);
retv = read(fd,hd,max_buffer_size);
printf("retv is : %d\n",retv);
while(retv>0)
{
printf("receive data size=%d\n",retv);
ncount+=retv;
printf("ncount: %d\n",ncount);
if(retv>1 && hd[retv-1]!='\0')//there hava a problem
fwrite(hd,retv,1,fp);
else if(retv>1 && hd[retv-1]=='\0')
{
fwrite(hd,retv-1,1,fp);
break;
}
else if(retv==1 && hd[retv-1]=='\0')
break;
retv=read(fd,hd,max_buffer_size);
}
printf("the received data size is:%d\n",ncount);
printf("\n");
flag_close=close(fd); 展开
tcgetattr(fd,&opt);
cfmakeraw(&opt);
// tcflush(fd,TCIOFLUSH);
set_Parity(fd,8,1,'n');
opt.c_cc[VTIME] = 0;
opt.c_cc[VMIN] = 1;
cfsetispeed(&opt,B115200);
cfsetospeed(&opt,B115200);
tcsetattr(fd,TCSANOW,&opt);
printf("ready for receving data...\n");
// retv = fread(hd,1,max_buffer_size,fp);
retv = read(fd,hd,max_buffer_size);
printf("retv is : %d\n",retv);
while(retv>0)
{
printf("receive data size=%d\n",retv);
ncount+=retv;
printf("ncount: %d\n",ncount);
if(retv>1 && hd[retv-1]!='\0')//there hava a problem
fwrite(hd,retv,1,fp);
else if(retv>1 && hd[retv-1]=='\0')
{
fwrite(hd,retv-1,1,fp);
break;
}
else if(retv==1 && hd[retv-1]=='\0')
break;
retv=read(fd,hd,max_buffer_size);
}
printf("the received data size is:%d\n",ncount);
printf("\n");
flag_close=close(fd); 展开
展开全部
检查串口的工作模式。
我记得串行有一种 7bit 的传输模式,这个模式下,只能传输 7bit 的数据,对应的就是 ASCII 文本,二进制传输都会出问题。
其实,你也可以完全不考虑传输模式的问题。发送数据时,用 base64 编码,收到数据后再解码就 OK 了。这样 base64 数据完全都是 7bit 的。
我记得串行有一种 7bit 的传输模式,这个模式下,只能传输 7bit 的数据,对应的就是 ASCII 文本,二进制传输都会出问题。
其实,你也可以完全不考虑传输模式的问题。发送数据时,用 base64 编码,收到数据后再解码就 OK 了。这样 base64 数据完全都是 7bit 的。
更多追问追答
追问
谢谢你,但我已经设置为8bit的传输模式了,二进制文件的读写怎样操作比较好,我还是按照处理字符的形式来读写,最后设置结束位为'\0'。没有其他的思路,跪求指教
追答
二进制里面 \0 也是可能存在的,所以你设置任何结束位都可能导致出问题。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询