基于ARM-LINUX的GPS導航系統 論文_第1頁
基于ARM-LINUX的GPS導航系統 論文_第2頁
基于ARM-LINUX的GPS導航系統 論文_第3頁
基于ARM-LINUX的GPS導航系統 論文_第4頁
基于ARM-LINUX的GPS導航系統 論文_第5頁
已閱讀5頁,還剩61頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、基于ARM-LINUX的GPS導航系統 論文_圖文  目 錄  0摘要 1 1引言2 1系統方案選擇與論證2  1.1總體設計方案 3  1.2部分模塊設計方案3  1.2.1 主控芯片選擇方案 3  1.2.2 操作系統及選擇方案 3  1.2.3 GPS模塊設計方案3  1.2.4顯示模塊設計方案 3  1.2.5地圖文件存放方案 錯誤!未定義書簽。  1.3總體方案確定4 2 系統硬件設計&

2、#160; 2.1主控芯片電路5  2.2 flash芯片電路 7  2.3串口電路 8  2.4 usb接口電路 9  2.6系統總線及lcd接口電路 9  2.5電源電路 10 3系統的軟件設計 11  3.1程序結構框圖 11  3.2 Maintab類 11  3.3 Mainwidget類 12  3.4 config 類 12  3.5 map類 13  

3、3.6 gps_diver 類 14  3.7 staSNR 類 15  3.8 debug_PDF 類 16  3.9 Makefile 文件 16  3.10 地圖文件 (mapinfo.txt文件)錯誤!未定義書簽。  4測試 16  4.1操作系統燒寫測試 16  4.2 衛星接收測試18  4.3地圖顯示測試 20  4.4GPS信號檢測測試錯誤!未定義書簽。  4.5功耗測試 23&#

4、160; 4.6其他測試 23  4.7測試結果分析 23 5總結 23     參考文獻: 23 謝: 24 錄: 24     基于ARM-LINUX的GPS導航系統     朱衡  (物理與電子信息學院 應用電子技術教育專業 06級 指導老師:周永宏)     摘要:本系統由GPS數據采集并顯示、地圖顯示兩大部分組成,模擬GPS導航的過程。通過GPS模塊、arm9硬件環境、嵌入式L

5、INUX操作系統、TFT觸摸屏等模塊來完成整個體系的運作,使其實時采集GPS數據,然后將GPS數據對應的地圖顯示出來,再利用串口將數據送入PC機數據庫中實現查詢等一系列功能。本設計的特點在于界面友好、用戶易操作、功耗低、便于長時間戶外導航。  關鍵詞:ARM;LINUX;GPS;C+語言;SHELL編程;嵌入式操作系統     The ARM-LINUX-based GPS navigation system     Zhu Heng  (Institute: Institu

6、te of Physics and Electronic Information Professional: Applied Electronic Technology Education  Year: 06 Instructor: ZHOU Yong-hong)     Abstract: This system consists of GPS data collection, map display composed of two parts, simulated GPS navigation process. Through t

7、he GPS module, arm9 hardware environment, embedded LINUX operating system, TFT touch screen and other modules to complete the operation of the entire system to collect real-time GPS data, GPS data and then display the corresponding map, re-use the data into the PC serial port machine in the database

8、 queries, and so to achieve a series of functions. This design feature is user-friendly, user easy to 1     operate, low power consumption, easy to navigate a long time outdoors.     Keywords: ARM; LINUX; GPS; C + + language; SHELL programming; embedded operat

9、ing system  0 引言  GPS 是英文Global Positioning System(全球定位系統)的簡稱,而其中文簡稱為“球位系”。GPS是20世紀70年代由美國陸海空三軍聯合研制的新一代空間衛星導航定位系統 。其主要目的是為陸、海、空三大領域提供實時、 全天候和全球性的導航服務,并用于情報收集、核爆監測和應急通訊等一些軍事目的。隨著人民生活水平的法杖,GPS技術被越來越多的應用在個人PDA、個人車載終端、 等個人設備上。人們通過手持GPS,能準確知道自己所在的位置,從實現到導航、確定旅游路線、獲取地理信息等功能。本文介紹的GPS導航系

10、統,以ARM作為主控芯片,配以GPS、TFT觸摸屏、嵌入式LINUX操作系統,構建了一個集GPS信息顯示、地圖顯示、語音導航為一體的完整系統。本系統在一定程度上推動了個人手持GPS導航設備研究的發展。  1 系統方案選擇和論證  1.1 總體設計方案     個人手持設備要求界面美觀、功耗低、易于操作。系統應有彩色觸摸屏;低功耗、高速度的處理芯片;帶有嵌入式操作系統;GPS信息接收模塊;sd卡用以存放地圖;  模塊框圖分別如圖1所示:       

11、; 圖1 系統結構框圖   System Structure Diagram     1.2 部分模塊設計方案     控制模塊設計方案  方案一:采用凌陽公司的16位單片機,它是16位控制器,具有體積小、驅動能力高、集成度高、易擴展、可靠性高、功耗低、結構簡單、中斷處理能力強等特點。用于語音處理和識別等領域。滿足系統GPS模塊和語音導航功能的需要。由于本系統需要彩色人機交互界面,對處理速度要求較高,故不采用。  方案二:采用samsung公司的

12、s3c2440。S3c2440采用ARM920t內核,實現了MMU、ARBA、BUS和Harvard高速緩沖體系結構。是一塊高性能、低功耗的嵌入式芯片??芍踩氩僮飨到y。在個人PDA領域應用及廣。植入操作系統后,在用戶GUI編程方面具有很大優勢。內置AD/DA,便于擴展語音模塊。故選用此芯片為主控芯片。     1. 2. 2 操作系統選擇方案  Linux操作系統廣泛應用在嵌入式設備中,其源代碼開放、免費;內核性能高效、多任務、可制定;完善的圖形管理、文件管理機制;良好的開發環境、強大的工具集 。 可移植QT開發環境,可實現跨平臺的編

13、譯,代碼重用率高。     1.2.3 GPS模塊選擇方案  方案一:采用串口接口GPS模塊。優點:便于驅動,價格便宜。缺點:嵌入式linux的調試需要用到串口,若GPS模塊占用了串口會造成調試不便。故不采用  方案二:采用usb接口GPS模塊。優點:便于攜帶、連接開發板。缺點:驅動相對較難、價格相對較貴。為了便于調試和攜帶,采用usb接口GPS模塊。     3     方案一:采用LCD顯示。液晶顯示屏(LCD)具有輕薄短小,低耗電

14、量。但不能實現觸摸功能,故部采用。  方案二:采用TFT顯示。TFT屏幕帶有四線式電阻觸摸膜,能實現觸摸功能、便于用戶操作,故采用。     方案一:采用s3c2440核心板內置nand flash 存放。Nand flash 讀取速度快。但容量較小,只有128M,不適合存放大量地圖數據,故不采用。  方案二:采用外置sd卡。Sd卡讀取速度相對較慢,且會增加成本。但能存放大量數據(),地圖更新升級也很方便。故采用。     1.3 總體方案確定  1) 控

15、制芯片: 采用s3c2440 arm9 處理器  2) 液晶顯示模塊: 采用NEC TFT 3.5 寸屏幕  3) GPS模塊: 采用三星公司的GPS-USBII模塊  4) nand flash: 采用 K9F1208;  5) nor flash: 采用 AM29LV160DB  5) 音頻處理芯片: UDA1341TS;  6) SD卡 模塊: 采用金士頓公司的 4GB SD卡;  7) 電源模塊: 采用兩個8V可充電鋰電池;  

16、8) 操作系統: 采用嵌入式linux操作系統     2 系統的硬件設計與實現  系統硬件采用友善之臂的s3c2440 mini2440開發板。Mini2440 體積小,便于攜帶;接口豐富,易于擴展;功耗低,便于長時間戶外導航。  Mini2440硬件特性如下圖:  4     圖2 主控芯片電路  Fig.2 Master-chip circuitry  2.1 主控芯片電路    

17、 主控芯片為s3c2440的6層核心板,該核心板性能穩定、工藝精良。  5      6      圖2.1 主控芯片電路  Fig.2.1 Circuit of ultrasonic transmitting and receiving  2.2 flash芯片電路     2.21 nand flash芯片電路 Nand flash 是操作系統的程序存儲區,該芯片掉電不丟失數據、壽命長,可反復擦寫。芯片

18、容量128M。適合存放高密度數據結構      圖2.2.1 主控芯片電路  Fig.2.2.1 Circuit of ultrasonic transmitting and receiving  2.22 nor flash芯片電路  Nor flash是系統 BIOS 存儲區。該芯片掉電不丟失數據、壽命長,可反復擦寫。芯片容量8M。適合高速度、低數據密度的數據結構。  7     圖2.2.2 主控芯片電路  F

19、ig.2.2.2 nor flash chip circuitry     2.3 串口電路  采用max3232電平轉換芯片與計算機通信      8     圖2.3 串口電路  Fig.2.3 Serial circuit     2.4 usb端口電路  采用usb2.0協議,usb接口用以連接gps模塊      圖2.4 us

20、b端口電路  Fig.2.4 Driving circuit  2.5 系統總線及lcd接口電路     9     Fig.2.5 Driving circuit  2.6 電源電路      圖2.6 電源電路  Fig.6 Power circuit     10      3 系統的軟件設計 

21、0;本系統的所有程序均采用C+語言編寫,開發工具為QT embed 2.0。程序定義了許多類來分別管理各個模塊,通過對各個類的操作,來構建整個程序框架。  3.1 程序整體結構框圖     圖3.1 maintab類流程圖     Fig.3.1 Diagram of the overall structure of program  3.2 Maintab類  Maintab 類負責程序外框基本定義及程序初始化    

22、60;   圖3.2 maintab類流程圖  Fig.3 .2 maintab Class Flowchart  3.3 mainwidgt類  Mainwidgt類負責對各個按鈕部件、頁面部件的初始化     圖3.3 mainwidget 類流程圖  Fig.3.3 mainwidget class Flowchart  3.4 config類流程圖  Config類用以實現對地圖路徑、gps模塊波特率的設置

23、12     圖3.4 config 類流程圖  Fig.3.4 config class Flowchart  3.5 map類  Map類負責讀取mapinfo文件里的地圖 ,并顯示對應地圖。  地圖顯示算法:首先把地圖分割成n*n小塊。然后系統通過得知整張地圖四角的坐標,計算出地圖每個像素點所對應的坐標。最后根據讀取的gps信息,找到對應的地圖,并顯示到lcd上。     圖3.5 map 類流程圖  Fig.

24、3.5 map class Flowchart  3.6 gps_diver類  gps_diver類負責驅動gps模塊,gps驅動原理如下所述:  1227.60HMz的L2載波。L1為民用頻率,L2為軍用。民用GPS信號調試成C/A碼發送,C/A碼又被稱為粗捕獲碼,是1MHz的偽隨機噪聲碼(PRN碼),其碼長為1023位(周期為1ms)。用戶機接受到C/A碼后,通過gps接受器,解調為發送次C/A碼的衛星時間。并通過多個衛星發送的C/A碼時間差(至少3個),來確定當前位置。并以串口的形式把經緯度數據發送給上位機。 

25、60;   14         圖3.6 gps_driver類流程圖      Fig.3.6 gps_driver class Flowchart  3.7 staSNR類  StaSnR類負責對檢測衛星數量,并告知gps_driver類。     圖3.7 strSNR類流程圖  Fig.3.7 strSNR class Flowchart  3.8

26、 debugPDF類  debugPDF類負責提供調試信息,錯誤編號等內容。調試程序時,配合linux中gdb命令。 能實現斷點調試、逐步調試等功能并顯示對應的錯誤信息。 15     定義如下:     #include <stdlib.h>  #include <stdio.h>  #ifndef DEBUG_PDF_H  #define DEBUG_PDF_H  /=debug leve

27、l for info trace bug  #define debug 1  #define POP3DEBUG 1  #ifdef POP3DEBUG  #define PDF(level, fmt, args.)   if (debug >= level) printf("%s:%d " fmt, _PRETTY_FUNCTION_, _LINE_ , # args)  #else  #define PDF(level, fm

28、t, args.) do while(0)  #endif  0:沒有任何的顯示!  1:正常工作的,能顯示工作運行主流程error exit fatal show it  2:更進一顯示信息  3:完全跟蹤!     3.9 Makefile文件  Makefile文件為整個工程的管理文件 ,作用是連接各個頭文件、c文件,最終編譯成可執行文件。由于使用qt開發環境,程序可以在x86平臺上與arm平臺上分別運行。只需要修改Makefil

29、e文件中的編譯期即可。  3.10 地圖文件(mapinfo.txt 文件)  地圖文件由一大張成都市區地圖分割成許多小地圖。Map.cfg文件里包含了整張地圖信 16     息。mapinfo:103.831787,30.687817,104.314155,30.473525,1500,1200,300。分別代表整個地圖的左上角經緯度、右下角經緯度、地圖像素的長度、地圖像素的寬度、每張地圖的像素寬度。軟件通過讀取map.cfg的內容,來獲取地圖的基本信息。  地圖軟件獲取方法:采用專業地圖下

30、載軟件 UMD(universal maps download),用戶只需在此軟件里輸入想要地圖的四角經緯度坐標。即可得到所需地圖。保證mapinfo.txtL里的地圖坐標與實際坐標一致。  4 測試  4.1 操作系統燒寫測試     安裝操作系統測試的目的是搭建系統的軟件環境,便于后續工作 安裝linux有如下步驟  1. 格式化nand flash  2. 安裝bootloader  3. 安裝內核文件  4. 安裝文件系統

31、60; 如下圖所示      17     圖4.1.1 燒寫操作系統-vivi界面  Fig.4.1.1 Flow chart of program of cooling automatically  安裝好操作系統后,重啟系統,將出現如下畫面。      圖 4.1.2 操作系統啟動畫面  Figure 4.1.2 operating system to start screen  

32、系統燒寫成功  4.2 衛星接收測試  衛星接收測試的目的是檢測接收到衛星的數量,以便在接收到相同衛星的情況下,檢測gps信號。測試位置:四川省成都市。  第一次測試:位置室內 衛星數量 0 如下圖:  18     圖 4.2.1 第一次衛星接收測試 Figure 4.2.1 The first test satellite reception  第二次測試:位置室外空曠地帶 衛星數量 7 如下圖:     圖 4

33、.2.2 第二次衛星接收測試 Figure 4.2.2 The second test satellite reception  第三次測試:位置街道 衛星數量 6 如下圖: 19      圖 4.2.3 第三次衛星接收測試  Figure 4.2.2 The third test satellite reception     經測試,在室內不能接收到衛星的gps信號。故此系統只能在戶外使用。  4.3 地圖顯示測試  地圖顯示測試

34、的目的是測試載入地圖的正誤、驗證地圖上下左右移動的功能。 第一次測試: 能實現上下左右移動,顯示地圖如下圖:  20  Figure 4.3.1 The first map shows test  第二次測試:能實現上下左右移動,顯示地圖如下圖:     21     圖 4.3.2 第二次地圖顯示測試     第三次測試:能實現上下左右移動,顯示地圖如下圖: Figure 4.3.2 The second map

35、shows test     圖 4.3.3 第三次地圖顯示測試     Figure 4.3.3 The third map shows test  經測試地圖能準確的載入,并能實現上下左右移動的功能     4.4 gps信號檢測測試  Gps信號測試的目的是測試gps信號的精確度,測試數據列于表3中。  表3 gps數據測量表   22     從上表

36、可以看出,gps數據精確度較高,誤差都在0.01%左右     4.5 功耗測試  測試環境:戶外  系統使用硬件:gps模塊、sd卡、液晶屏   從上表可看出,系統功耗在1w左右。能滿足設計技術指標。  4.6 其他測試  1)地圖路徑變更測試 。 功能實現,測試通過  2)gps串口波特率設置。 功能實現,測試通過     4.7 測試結果分析  由以上的測試數據可以看出:

37、本GPS導航系統能很好地實現題目要求的各項功能。測試期間運行穩定,基本達到了設計要求。     5 總結  23         本系統成功的模擬了個人手持gps導航系統。用戶通過點擊觸摸屏幕、方便的使用軟件。實現了地圖的顯示、拖動;gps信息、衛星數量的顯示;地圖路徑的更改;gps波特率的更改的功能。系統低功耗、高處理速度、操作簡易、界面有好。已具有一定的實用價值。  通過這次畢業設計,我在更加牢固、靈活地掌握了所學的專業知識的同時。大量學習了嵌入式方面

38、的相關知識:arm體系結構、操作系統、c+編程、shell編程、硬件驅動程序。  參考文獻:     1 杜春雷 ARM體系結構與編程 清華大學出版社 2003-08-12  2 c+語言程序設計(第三版) 鄭莉 董淵 張瑞豐 編著 清華大學出版社 2001-10-11  3 嵌入式系統開發 齊宇 徐俊 編著 人民郵電出版社 2005-06-05  4 美Douglas Boling 嵌入式linux編程 北京科彥科技發展公司 譯 北京大學出版社 2003-03-12

39、0; 5 張洪斌 QT編程指南 電子科技大學出版社 2006-06-12  6 李先力 文蒼茂 GPS原理及應用清華大小而出版社 2004-08-27  8 李新峰 何廣生 趙秀文 基于ARM9的嵌入式Linux開發技術 電子工業出版社2003-03-18  9Thomas L.Floyd.Electronic Devices M. Prentice-Hall Inc, New jersey 1999-05-19     致謝     至此,我的

40、畢業設計已經基本完成?;叵脒^去的點點滴滴,如果沒有學校、學院、老師、同學的關心和幫助,我也無法按期完成這令我滿意的作品。  在此,我首先感謝學校和學院為我提供優越的實驗場所和器材,使我能夠更加方便、順利地進行作品設計與調試,減少了設計周期;  其次,我要感謝指導老師周永宏老師在百忙之中抽出時間同我一起探討系統構架和軟件的編寫,并不厭其煩地替我修改論文,給我了莫大的幫助,并使我學到了很多東西。周老師嚴謹負責的治學態度,給我留下了深刻的印象,將使我終身受益。我再次對周老 24     師這一年多來對我的關心和幫助表示最

41、誠摯的謝意;  最后,向在整個設計過程中關心和幫助過我的其他老師和同學致謝。 附錄:  附錄1:測試儀器  表7 測試儀器設備清單      附錄2:部分參考源程序  Maintab 類程序:  #include <qapplication.h> #include <qcanvas.h> #include <qfont.h> #include <qimage.h> #include <qpainter.

42、h> #include <qrect.h>  #include <qwidget.h> #include <qimage.h> #include <qpixmap.h> #include <qpushbutton.h> #include <qlabel.h> #include <qdialog.h> #include <qpainter.h>  #include <qapplication.h> #include <qwidget.h&

43、gt; #include <qglobal.h> #include <qcolor.h>     25        #include <qlayout.h>  #include <stdlib.h>  #include <stdio.h>  #include <qpalette.h>  #include <qcolor.h>

44、0;    /=  #include "MainWidget.h"  #include "zhMap.h"  #include "gps_driver.h"  #include "maintab.h"  #include "GPS.h"     MainTab:MainTab(QWidget *parent,const char

45、 * name):QTabWidget(parent,name)      GpMainLayout=new MainLayout;  GpGPS=new GPS;  GpConfig=new Config;  GpConfig->GetObject(GpMainLayout);  GpConfig->GetObject(GpGPS);  GpConfig->setCOMBDRate();  GpConfig->

46、setMapPath();  addTab(GpMainLayout,QString("MAP");  addTab(GpGPS,QString("GPS INFO");  addTab(GpConfig,QString("CONFIG");  timerid=startTimer(1000);       void MainTab:timerEvent(QTimerEvent * event)&

47、#160; GPS_DATA mGPSData;  int i;  PDF(3,"TABMaster timer alarm!n");     /=設置好衛星信號強度數據!     GpGPS->mpSatSNR->SetData(GpMainLayout->pzhDrawRect->pGpsdriver->mGPSStaSNR);  /=  GpMainLayout->

48、pzhDrawRect->pGpsdriver->GetData(mGPSData);  26     GpGPS->mpGPSinfo->SetData(mGPSData);  /=  PDF(3,"TABMaster timer endn");       int main(int argc, char* argv)    QApplication

49、app(argc,argv);  MainTab t;  app.setMainWidget(&t);  t.show();  return app.exec();       Gps_driver 類程序:     #include <string.h>  #include "gps_driver.h"  #include <sy

50、s/types.h>  #include <sys/stat.h>  #include <fcntl.h>  #include <unistd.h>     /*NMEA 0183 的 Checksum 只能作8位異或包括","的運算,但不包括"$" 及 "*" 定義符號的運算。  最后的兩位是檢驗碼的hex(16進制)轉成ASCII 兩個符號 (0-9, A-F)。

51、0; */  char nmea_checksum(char *sentence)  /* is the checksum on the specified sentence good? */    unsigned char sum = '0'  char c, *p = sentence,csum2;  c = *p;  while (c != '*')   sum = c;p+;c=*p;

52、  /=  csum0=sum&0x0f;  if(csum0>=10) csum0+='A'  else csum0+='0'  /=  csum1=(sum&0xf0)>>4;  if(csum1>=10) csum1+='A'  else csum1+='0'  27    &#

53、160;c= (csum1=toupper(p1) && csum0=toupper(p2) );  return c;/ 0 is error       int zh_gpsDriver:fifoctl(FifoType * priv ,int data ,const unsigned char flag)   int temp = -1;  unsigned int widx = 0;  widx = priv->w_idx;

54、/* Save the old index before proceeding */ if (flag = WR) /write data    /* Save it to buffer */  if (priv->w_idx + 1) % BUFSIZE) = priv->r_idx)    /* Adjust read index since buffer is full */  /* 無法寫入來處理fifo滿。can wd to fifo */ &

55、#160;/priv->r_idx = (priv->r_idx + 1) % BUFSIZE;  /保證是環狀的FIFO。  PDF(2,"buffer fulln");  return -1;    priv->bufferpriv->w_idx = data;  priv->w_idx = (priv->w_idx + 1) % BUFSIZE;  /保證是環狀的FIFO。  

56、;return 0;    else /read data    if (priv->r_idx = widx)   PDF(2, "buffer emptyn");return -1;  else    temp= priv->bufferpriv->r_idx;  priv->r_idx = (priv->r_idx + 1) % BUFSIZE; &#

57、160;/保證是環狀的FIFO。  return temp;      PDF(2, "flag errorn");  return -1;       28     zh_gpsDriver:zh_gpsDriver(QObject * parent,const char name):QObject(parent,name)     &

58、#160; COM_PARAM mCOMParam;  mCOMParam.SerialDevicePath="/dev/ttyUSB0"  mCOMParam.BaudRate=9600;  id=startTimer(200);  buf.pos=0;  buf.sw=0;  mpGPS_GPRMC=&mGPS_GPRMC;  mpGPS_GPRMC->gps_sw='V' 

59、0;mpGPS_GPGSV=&mGPS_GPGSV;  PDF(1,"gps driver construct!n");  /* Open modem device for reading and writing and not as controlling * tty. | O_NONBLOCK*/  fd=-1;  setCOM(mCOMParam);       int zh_gpsDriver:GPRS_GetTextL

60、ineFromFIFO( CMD_BUF * pcmd_buf)   / 去掉換行符  int j=0;  int idata;  do    idata=fifoctl(&fifo,idata,RD);  if(idata=-1) return 0;  else if(idata='n')    pcmd_buf->bufpcmd_buf->pos=(char

61、)(idata&0x00ff);  pcmd_buf->pos+;pcmd_buf->sw=1;  break;    else  pcmd_buf->bufpcmd_buf->pos=idata;pcmd_buf->pos+;    while(j+<BUFSIZE);  / PDF(4,"end of a line !n");  if(pcmd_bu

62、f->pos)>(BUFSIZE-5)  PDF(2,"potential fiflo overflow!n");CMDBUF_Init(pcmd_buf); PDF(2,"pos=%dn",pcmd_buf->pos);  29 *     pcmd_buf->bufpcmd_buf->pos='0'  / PDF(4,"pos=%d ibufpos=%d a msg=%sn",pos,i

63、bufpos,pStrBuffer); return 1;       int zh_gpsDriver:zh_getGPSdata(GPS_DATA & gpsdata)    PDF(3,"zh_getGPSdata!n");  gpsdata.lati=mpGPS_GPRMC->latitude;  gpsdata.lont=mpGPS_GPRMC->longitude ;  return

64、mpGPS_GPRMC->gps_sw;    double ddmm2dddd(double ddmm)    double fi,ffz,ffx;  int fz;  fi=ddmm;  fz=(int)fi;  ffz=(double)fz;/取整數部分  ffx=fi-ffz;/取小數部分  fi=ffz+ffx/0.6;  PDF(2,"ddmm=%l

65、f dddd:%lfn" ,ddmm,fi );  return fi;       int zh_gpsDriver:GPGSV_Analysis( GPS_GPGSV * pGPS_GPGSV)    switch(pGPS_GPGSV->GSV_ID)  case  1:memcpy(&(mGPSStaSNR.Sta0),&(pGPS_GPGSV->Sta1),sizeof(STA_INFO)

66、; memcpy(&(mGPSStaSNR.Sta1),&(pGPS_GPGSV->Sta2),sizeof(STA_INFO); memcpy(&(mGPSStaSNR.Sta2),&(pGPS_GPGSV->Sta3),sizeof(STA_INFO); memcpy(&(mGPSStaSNR.Sta3),&(pGPS_GPGSV->Sta4),sizeof(STA_INFO); break;  case  2:memcpy(&(mGPSStaSNR.Sta4),&(p

67、GPS_GPGSV->Sta1),sizeof(STA_INFO); memcpy(&(mGPSStaSNR.Sta5),&(pGPS_GPGSV->Sta2),sizeof(STA_INFO); memcpy(&(mGPSStaSNR.Sta6),&(pGPS_GPGSV->Sta3),sizeof(STA_INFO); memcpy(&(mGPSStaSNR.Sta7),&(pGPS_GPGSV->Sta4),sizeof(STA_INFO); break;  case  3:m

68、emcpy(&(mGPSStaSNR.Sta8),&(pGPS_GPGSV->Sta1),sizeof(STA_INFO); memcpy(&(mGPSStaSNR.Sta9),&(pGPS_GPGSV->Sta2),sizeof(STA_INFO); 30     memcpy(&(mGPSStaSNR.Sta10),&(pGPS_GPGSV->Sta3),sizeof(STA_INFO); memcpy(&(mGPSStaSNR.Sta11),&(pGPS_GPGSV-

69、>Sta4),sizeof(STA_INFO); break;  default:break;         int zh_gpsDriver:CMD_Analysis( CMD_BUF * pcmd_buf )  char* pcmd;  int i;  if( pcmd_buf->sw =1)    PDF(3,"sentence: %sn endn",pcm

70、d_buf->buf);  pcmd=strstr(&pcmd_buf->buf0,"$GPRMC");/只對此語句解析  if (pcmd!=NULL)    if (!nmea_checksum(&pcmd1)    PDF(2,"check sum errorn");  /*CMDBUF_Init(&buf);  return 1;*/ 

71、0;     /2:判斷有效性。  i= sscanf(pcmd,"%*AV%c,",&mpGPS_GPRMC->gps_sw);  PDF(3,"gpsSwFiled=%cn",mpGPS_GPRMC->gps_sw);     if(mpGPS_GPRMC->gps_sw='V') PDF(3,"V invalid datan"); CMDBUF_Init(&bu

72、f); return 2;      /sscanf 并不能由空值來輸入浮點數。  / printf("Gpsid=%sn utc_time=%sn gps_sw=%cn latitude=%lfn lati_ns=%cn longitude=%lfn longi_ew=%cn spd=%lf",  /Gpsid,utc_time,gps_sw,latitude, lati_ns,longitude,longi_ew,spd);  i=  sscanf(p

73、cmd,"%,%,%c,%lf,%c,%lf,%c,%lf,%lf,%,%lf,%c,%s",  mpGPS_GPRMC->Gpsid, mpGPS_GPRMC->utc_time,&mpGPS_GPRMC->gps_sw, &mpGPS_GPRMC->latitude,&mpGPS_GPRMC->lati_ns,  &mpGPS_GPRMC->longitude,&mpGPS_GPRMC->longi_ew,/*7*/     &mpGPS_GPRMC->speed,&mpGPS_GPRMC->angle,mpGPS_GPRMC->utc_date,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論