|
今天把编译通过的读串口程序在linux下运行,但在pc串口上接好gps后却没什么反应,关键在read上,用到read(fd,buff,1)程序就没反应了,连之前的printf都没反应,把此句注释掉后所有printf都能输出。我是用虚拟机vmare里的linux的,是程序原因还是我的虚拟机不支持穿口啊???请大虾们多多帮助。
大致程序如下:
#include<sys/types.h>
#include<sys/stat.h>
#include<stdio.h>
#include<stdlib.h>
#include<termios.h>
#include<fcntl.h>
int status;
char ca[8],tmp;
int quart(int fp);
main()
{
int fp;
int max=80;
int i;
unsigned char wd,jd,Data[512];
unsigned char Time[32],PositionX[32],PositionY[32],Date[32];
unsigned char cc[32];
struct termios opt;
fd=open("/dev/ttyS0",O_RDWR);//以读写方式打开串口1
//设置串口:波特率19200,8位数据位,奇校验、1位停止位
if (fd<0)
{perror("/dev/ttyS0");
exit(-1);}
tcgetattr(fd,&opt);
cfsetispeed(&opt,B19200);
cfsetospeed(&opt,B19200);
opt.c_cflag &= ~PARENB;
opt.c_cflag &= ~PARODD;
opt.c_cflag &= ~CSTOPB;
opt.c_cflag &= ~CSIZE;
opt.c_cflag |= ~CS8;
tcsetattr(fd,TCSANOW,&opt);
printf("please wait");
while(!quart(fp)) ; //等待帧标志:
for(i=0;i {read(fp,cc,1);
Data=cc[0];
printf("%c",Data);}
}
int quart(int fp) //fp是IO口句柄,如果收到标志,返回1,否则0;
{ status=0;
read(fp,ca,1);
tmp=ca[0];
if(tmp=='$') //帧头
status=1;
return status;
} |
|