EDN China > 技术文章 > 通信 > 网络传输与交换 > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

基于uClinux的GPSOne/GPS双定位信息接收

来源:单片机与嵌入式系统应用/徐柳茂 蒋念东等?? 2007年01月27日 ?? 收藏0

int Maxfd = fd_gps>fd_gpsOne? fd_gps: fd_gpsOne;//得到串口描述符中较大的一个
  struct timeval tv;//定义超时控制结构
  fd_set fds; //文件描述符集合变量
  tv.tv_sec = 5;//设定超时值 5 s
  tv.tv_usec = 0;
  while(1){//通过GPSOne串口,发送GPSOne定位请求
    Rt = send_port (fd_gpsone, "AT+GPSSTRT\r", strlen("AT+GPSSTRT\r");
    if (Rt) == -1)
      printf("Error happened!");
    FD_ZERO (&fds);//初始化文件描述符集合
    FD_SET(*fd_gps, &fds);//设置文件描述符集合的相应位
    FD_SET(fd_gpsOne, &fds);//使用select,让内核开始监听GPSOne和GPS串口设备
    fd_sel = select((Maxfd)+1, &fds_gps, NULL, NULL, &tv);
    if (fd_sel < 0){
      printf("Error happened while receiving gps data.\n");}
    else if (FD_ISSET(*fd_gps, &fds)){//若GPS串口设备有数据可读
      recv_len = recv_port(fd_gps, buf, 254);
      if (recv_len > 0){
        memcpy (gps_info, buf, recv_len)

;//信息保存到
        gps_info数组中gps_info_process(gps_info);//解析定位信息处理
      }
    }
    else if (FD_ISSET(*fd_gpsOne, &fds)){//若GPSOne串口设备有数据可读
      recv_len = recv_port(*fd_gpsOne, buf, 254);
      if (recv_len > 0){memcpy (gpsOne_info, buf, recv_len); //信息保存到gpsOne_info数组中
      gpsOne_info_process(gpsOne_info);//解析定位信息处理
      }
    }
    sleep(1);
  }

  6 设计总结

  本文详细说明了串口编程的基本方法和步骤,并提出一种基于select的I/O复用机制处理多个串口信息的方案,同时给出这种方案的具体实现。此方案具有较高的可靠性,保证了多个串口的信息可以很好地被接收和处理,而且不相互干扰,利于系统更好地管理多个文件设备。特别是在数据采集和数据传输领域中,select利用内核同时监听多个设备描述符机制,可以被广泛地应用于嵌入式系统多路I/O采集的设计中。

  参考文献

[1] Kurt Wall. GNU/Linux编程指南[M].张辉,译. 北京:清华大学出版社,2005.
[2] Richard Stevens W. UNIX网络编程[M]. 第2版. 第1卷·套接口API和X/Open传输接口API.北京:清华大学出版社,1998:121131.
[3] 马忠梅,李善平,康慨,等. ARM&Linux嵌入式系统教程[M].北京:北京航空航天大学出版社,2005:255261.
[4] 周立功.ARM嵌入式系统实验教程(2).广州:广州周立功单片机发展有限公司,2005:213219.
[5] 邓滔,徐勇. GPS与嵌入式Linux平台串行通信研究[J]. 工业控制计算机,2005,18(1).

  


上一页1234下一页
?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

uClinux? GPSOne/GPS? 定位?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈