当前位置:首页 > 技术解密   

解密基于uClinux的GPSOne/GPS双定位信息接收技术

发布时间:2009-09-10 15:15:18  来源:本站整理


  5 利用select I/O的机制实现GPS与GPSOne数据的接收
  本文提出的基于GPS与GPSOne信号的双定位的解决方案,即对系统两个串口定位信号的监听与处理,充分利用uClinux下基于Select的I/O复用机制,更利于较复杂系统的控制和管理。
  方案实现的程序流程如图4所示。
  图4 双定位信息获取的程序流程
  以下代码为使用Select I/O机制接收GPS信息和GPSOne信息的软件实现:
  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
  ", strlen("AT+GPSSTRT
  ");
  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.
  ");}
  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);
  }

上一页  [1] [2] [3] [4] [5] 


网站首页-龙人概况-企业文化-服务与承诺-人才与使命-联系我们
@龙人计算机系统工程有限公司 版权所有 严禁转载 建议1024*768,IE浏览器6.0以上为最佳浏览模式  粤ICP备0428956号  关键词:

PCB抄板

|

芯片解密