<em id="0a85b"><option id="0a85b"></option></em>

<abbr id="0a85b"></abbr>

      <nobr id="0a85b"></nobr>
        <tr id="0a85b"></tr>
        9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
        學習啦>學習電腦>操作系統>Linux教程>

        linux下串口gps應用

        時間: 志藝942 分享

          嵌入式系統是計算機技術的一種重要應用形式。從概念上講,嵌入式系統并不是近來才出現的產品,但隨著計算技術和通信技術的迅速發展以及Internet的廣泛應用,嵌入式系統卻從來沒有象現在這樣風靡過。接下來是小編為大家收集的linux下串口gps應用,希望能幫到大家。

          linux下串口gps應用

          一、Gps數據格式標準(nmea0183)

          http://en.wikipedia.org/wiki/NMEA

          這次只要獲取經緯度信息,所有主要針對下面2個Gps命令

          (1)位置信息(GGA)

          $GPGGA、<1>、<2>、<3>、<4>、<5>、<6>、<7>、<8>、<9>、M, <11>、<12>*hh

          <1>UTC時間,hh mm ss格式(定位它的)

          <2>經度dd mm mmmm 格式(非0)

          <3>經度方向 N或S

          <4>緯度ddd mm mmmm 格式(非0)

          <5>緯度方向E或W

          <6>GPS狀態批示0—未定位 1—無差分定位信息 2—帶差分定位信息

          <7>使用衛星號(00~08)

          <8>精度百分比

          <9>海平面高度

          <10>大地隨球面相對海平面的高度

          <11>差分GPS信息

          <12>差分站ID號 0000-123

          (2)最簡特性(RMC)

          $GPRMC、<1>、<2>、<3>、<4>、<5>、<6>、<7>、<8>、<9>、<10>、<11>、*hh

          <1>定位時UTC時間hhmmss 格式

          <2>狀態A=定位V=導航

          <3>經度ddmm.mmm 格式

          <4>經度方向N 或S

          <5>緯度dddmm.mmmm

          <6>緯度方向E或W

          <7>速率

          <8>方位敬愛(二維方向指向,相當于二維羅盤)

          <9>當前UTC日期ddmmyy 格式

          <10>太陽方位

          <11>太陽方向

          二、nmealib庫的使用

          (1) 獲取nmealib源碼,并交叉編譯成.so文件

          nmealib 最新版本為0.53,可在http://sourceforge.net/projects/nmea/下載獲取到

          獲取源碼后,修改源碼結構如下:

          a. 在源碼目錄新建include目錄,將源碼中所有.h文件移到該include目錄中,

          b. 編寫Makefile文件,文件內容如下:

          # 制作的目標文件名libnmeagps.so

          TARGET = libnmeagps.so

          # 包含所有頭文件

          INCLUDE_FILE = context.h generate.h parse.h parser.h gtime.h

          INCLUDE_FILE += tok.h units.h gmath.h nmea.h sentence.h info.h generator.h config.h

          # 設置交叉編譯工具

          COMPILER_PATH = arm-linux-

          CC = $(COMPILER_PATH)gcc

          CXX = $(COMPILER_PATH)g++

          LD = $(COMPILER_PATH)ld

          AR = $(COMPILER_PATH)ar

          LIBRARY = ./lib/

          INCLUDE_DIR = ./include/

          FLAGS = -Wall -O3 -s -I. -I$(INCLUDE_DIR)

          ifdef S3C2440

          FLAGS += -DPLAT_S3C2440

          else ifdef TI6446

          FLAGS += -DPLAT_TI6446

          else

          endif

          OBJS = $(patsubst %.c, %.o, $(wildcard *.c))

          %.o:%.c

          @$(CC) -c $(FLAGS) $< -o $@

          all:$(OBJS)

          @$(CC) -shared -Wall -fPIC -s $(OBJS) -o $(TARGET)

          @cp $(TARGET) $(LIBRARY) 1>/dev/null

          @cp $(INCLUDE_FILE) $(INCLUDE_DIR) 1>/dev/nul

          update:

          @cp -a $(INCLUDE_FILE) $(INCLUDE_DIR) 1>/dev/null

          clean:

          rm $(TARGET) *.o -f

          執行make命令,編譯生成動態庫文件libnmeagps.so

          (2) 移植nmealib庫到項目中

          在項目源碼目錄中新建nmea_gps目錄,將(1)中編譯生成的libnmeagps.so和所有頭文件拷貝到nmea_gps

          目錄中,在需要應用庫借口的代碼中增加相應頭文件的聲明即可。

          項目Makefile增加下面內容:

          NMEA_LIB=-L./nmea_gps/ -lnmeagps

          $(CXX) -o $@ $^ $(NMEA_LIB)

          (3) 測試

          /* nmea_lib測試程序 */

          void trace(const char *str, int str_size)

          {

          printf("Trace: ");

          write(1, str, str_size);

          printf("\n");

          }

          void error(const char *str, int str_size)

          {

          printf("Error: ");

          write(1, str, str_size);

          printf("\n");

          }

          int main()

          {

          nmeaINFO info;

          nmeaPARSER parser;

          FILE *file;

          char buff[2048];

          int size, it = 0;

          nmeaPOS dpos;

          file = fopen("gpslog.txt", "rb");

          if(!file)

          return -1;

          nmea_property()->trace_func = &trace;

          nmea_property()->error_func = &error;

          nmea_zero_INFO(&info);

          nmea_parser_init(&parser);

          /*

          while(1)

          {

          */

          while(!feof(file))

          {

          size = (int)fread(&buff[0], 1, 100, file);

          nmea_parse(&parser, &buff[0], size, &info);

          nmea_info2pos(&info, &dpos);

          /* 獲取 lat經度,lon緯度,sig信號指標,fix操作模式 */

          printf("%03d, Lat: %f, Lon: %f, Sig: %d, Fix: %d\n", it++, info.lat, info.lon, info.sig, info.fix);

          }

          fseek(file, 0, SEEK_SET);

          /*

          }

          */

          nmea_parser_destroy(&parser);

          fclose(file);

          return 0;

          }

          三、應用

          1. 打開串口設備

          hGpshandle = open("/dev/ttyS2", O_RDWR);

          2. 設置串口波特率

          set_serial_param(hGpshandle, 9600, 8, 1, 'n', 0);

          3. 循環從串口讀取數據,數據大小1024kb

          readlen = read(hGpshandle, tmp_buf, 1500);

          4. 數據取滿,解析gps數據

          pThis->DoParserGpsData(pArg);

          5. 從解析結果判斷gps信號質量

          /* 0 = Invalid; 1 = Fix; 2 = Differential, 3 = Sensitive */

          if(info.sig == GPS_SIG_OK)

          6. 經緯度數據單位轉換

          /* 經緯度轉換為位置點 */

          nmea_info2pos(&info, &pos[it]);

          7. gps校時

          pThis->DoCheckTimeByGps(info);

          8. 計算前后2個gps坐標點之間距離

          dist = nmea_distance(&pos[it - 1], &pos[it]);

          9. 將gps坐標信息,距離寫入記錄文件

          pThis->DoWriteGpsInfoToFile(g_sCurGpsInfoPath, info, dist);

          四、gps經緯度數據單位相關

          gps數據單位是一個需要注意的問題。

          (以下內容摘自網絡)

          1. GPS串口讀取的數據格式:

          GPS 串口讀出的是 DDMM.MMMM格式

          一般上位機是 DD.DDDDDD°或 DD°MM'SS" 格式, 這兩種都可以在 GE 里直接輸入

          舉例說明: 3147.8749 (示例,經緯度一樣) 格式為 DDMM.MMMM

          轉換成度:

          1. 度的部分直接就是31,

          2.剩下的 MM.MMMM/60=度, 所以 47.8749/60=0.797915

          則 轉換成度是 31.797915°

          轉換成度分秒:

          1. 同樣,度的部分直接就是31,

          2. 分直接是整數部分 47

          3. 秒則是 后面的 0.MMMM*60. 例子中為: 0.8749*60=52.494

          4. 則度分秒即是 31°47'52.494"


        看了“linux下串口gps應用”還想看:

        1.ftp應用實例和命令匯總

        2.關于GPS RTK技術在工程測量中的應用分析

        2806415 主站蜘蛛池模板: 日韩人妻无码精品久久| 老司机久久99久久精品播放免费| 久久亚洲中文字幕伊人久久大| 无码欧美毛片一区二区三| 久久亚洲精品人成综合网| 久久精品激情亚洲一二区| 在线中文一区字幕对白| 国产精品午夜福利资源| 免费人成网站免费看视频| 久久精品一区二区东京热| 国产日韩入口一区二区| 热久久美女精品天天吊色| 国产精品黄色片一区二区| 激情国产一区二区三区四区| 亚洲乱熟乱熟女一区二区| 国产片AV国语在线观看手机版| 亚洲一区二区三区在线激情| 成人网站免费观看永久视频下载| 久久午夜无码免费| 99久久精品久久久久久婷婷| 亚洲国产欧美在线人成AAAA| 成人看片欧美一区二区| 亚洲A综合一区二区三区| 国产精品爆乳奶水无码视频免费| 亚洲码欧洲码一二三四五| 国产午夜精品福利91| 国产999精品2卡3卡4卡| 老司机免费的精品视频| 91麻豆国产精品91久久久| 亚洲成在人天堂一区二区| 亚洲av无码乱码在线观看野外| 国产高清在线A免费视频观看| 亚洲精品一区国产| 美女一区二区三区在线观看视频 | 夜夜摸日日摸视频| 精品一区二区三区在线观看l| h动态图男女啪啪27报gif| 青青草国产自产一区二区| 国产精品亚洲А∨天堂免| 老妇女性较大毛片| 免费国产一级特黄aa大片在线|