返回信息流如题:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h> // open() close()
#include <unistd.h> // read() write()
#include <termios.h> // set baud rate
#include <fcntl.h>
#include <sys/select.h>
#include <sys/time.h>
#include <sys/types.h>
#define DEVICE_TTYS "/dev/ttyS1"
#define I_SET_BAUD_RATE B9600
void init_ttyS1(int fd)
{
struct termios newtio;
bzero(&newtio, sizeof(newtio));
newtio.c_lflag &= ~(ECHO | ICANON);
newtio.c_cflag = I_SET_BAUD_RATE | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR;//
newtio.c_oflag = 0;
newtio.c_oflag &= ~(OPOST);
newtio.c_cc[VTIME] = 5; /* inter-character timer unused */
newtio.c_cc[VMIN] = 0; /* blocking read until 9 chars received */
tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio);
}
int read_GPS_datas(int fd,char *buf_rev)
{
struct timeval tv;
tv.tv_sec=1;
tv.tv_usec=0;
int pos,ret,retval;
fd_set rfds;
pos=0;
while(1)
{
FD_ZERO(&rfds);
FD_SET(fd, &rfds);
retval = select(fd+1 , &rfds, NULL, NULL, &tv);
if(retval=-1)
{
perror("select()");
break;
}
else if(retval)
{
ret=read(fd,buf_rev+pos,2048);
pos+=ret;
if(buf_rev[pos-2] == '\r' && buf_rev[pos-1] == '\n')
{
FD_ZERO(&rfds);
FD_SET(fd, &rfds);
retval = select(fd+1 , &rfds, NULL, NULL, &tv);
if (!retval) break;// if no datas, break
}
}
else
{
printf("no data");
break;
}
}
return 1;
}
void get_gpsdata(int fd)
{
char buf_rev[2048];
while(1)
{
bzero(buf_rev,sizeof(buf_rev));
if (read_GPS_datas(fd,buf_rev))
{
printf("%s",buf_rev);
}
}
}
int main(void)
{
int fd;
printf ("\nThis is a test about GPS : receive GPS signal\n\n");
// open seriel port
fd = open(DEVICE_TTYS, O_RDONLY);
if (fd == -1)
{
printf("open device %s error\n",DEVICE_TTYS);
}
else
{
init_ttyS1(fd); // init device
get_gpsdata(fd); // GPS functions
// close ttyS0
if (close(fd)!=0) printf("close device %s error",DEVICE_TTYS);
}
return 0;
} // end main
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #5090同步于 2009/6/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
[求助]在做串口编程时出现select Illegal seek()会是什么原因
bjlw10
2009/6/13镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复