BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #5090同步于 2009/6/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖

[求助]在做串口编程时出现select Illegal seek()会是什么原因

bjlw10
2009/6/13镜像同步1 回复
如题: #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
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
smile830219机器人#1 · 2011/9/9
if(retval=-1) 这个地方应该是 if(retval==-1) ,等于不是赋值。