




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、基于ARM-LINUX的GPS導(dǎo)航系統(tǒng) 論文_圖文 目 錄 0摘要 1 1引言2 1系統(tǒng)方案選擇與論證2 1.1總體設(shè)計方案 3 1.2部分模塊設(shè)計方案3 1.2.1 主控芯片選擇方案 3 1.2.2 操作系統(tǒng)及選擇方案 3 1.2.3 GPS模塊設(shè)計方案3 1.2.4顯示模塊設(shè)計方案 3 1.2.5地圖文件存放方案 錯誤!未定義書簽。 1.3總體方案確定4 2 系統(tǒng)硬件設(shè)計&
2、#160; 2.1主控芯片電路5 2.2 flash芯片電路 7 2.3串口電路 8 2.4 usb接口電路 9 2.6系統(tǒng)總線及l(fā)cd接口電路 9 2.5電源電路 10 3系統(tǒng)的軟件設(shè)計 11 3.1程序結(jié)構(gòu)框圖 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操作系統(tǒng)燒寫測試 16 4.2 衛(wèi)星接收測試18 4.3地圖顯示測試 20 4.4GPS信號檢測測試錯誤!未定義書簽。 4.5功耗測試 23
4、160; 4.6其他測試 23 4.7測試結(jié)果分析 23 5總結(jié) 23 參考文獻(xiàn): 23 謝: 24 錄: 24 基于ARM-LINUX的GPS導(dǎo)航系統(tǒng) 朱衡 (物理與電子信息學(xué)院 應(yīng)用電子技術(shù)教育專業(yè) 06級 指導(dǎo)老師:周永宏) 摘要:本系統(tǒng)由GPS數(shù)據(jù)采集并顯示、地圖顯示兩大部分組成,模擬GPS導(dǎo)航的過程。通過GPS模塊、arm9硬件環(huán)境、嵌入式L
5、INUX操作系統(tǒng)、TFT觸摸屏等模塊來完成整個體系的運(yùn)作,使其實時采集GPS數(shù)據(jù),然后將GPS數(shù)據(jù)對應(yīng)的地圖顯示出來,再利用串口將數(shù)據(jù)送入PC機(jī)數(shù)據(jù)庫中實現(xiàn)查詢等一系列功能。本設(shè)計的特點在于界面友好、用戶易操作、功耗低、便于長時間戶外導(dǎo)航。 關(guān)鍵詞:ARM;LINUX;GPS;C+語言;SHELL編程;嵌入式操作系統(tǒng) 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(全球定位系統(tǒng))的簡稱,而其中文簡稱為“球位系”。GPS是20世紀(jì)70年代由美國陸??杖娐?lián)合研制的新一代空間衛(wèi)星導(dǎo)航定位系統(tǒng) 。其主要目的是為陸、海、空三大領(lǐng)域提供實時、 全天候和全球性的導(dǎo)航服務(wù),并用于情報收集、核爆監(jiān)測和應(yīng)急通訊等一些軍事目的。隨著人民生活水平的法杖,GPS技術(shù)被越來越多的應(yīng)用在個人PDA、個人車載終端、 等個人設(shè)備上。人們通過手持GPS,能準(zhǔn)確知道自己所在的位置,從實現(xiàn)到導(dǎo)航、確定旅游路線、獲取地理信息等功能。本文介紹的GPS導(dǎo)航系
10、統(tǒng),以ARM作為主控芯片,配以GPS、TFT觸摸屏、嵌入式LINUX操作系統(tǒng),構(gòu)建了一個集GPS信息顯示、地圖顯示、語音導(dǎo)航為一體的完整系統(tǒng)。本系統(tǒng)在一定程度上推動了個人手持GPS導(dǎo)航設(shè)備研究的發(fā)展。 1 系統(tǒng)方案選擇和論證 1.1 總體設(shè)計方案 個人手持設(shè)備要求界面美觀、功耗低、易于操作。系統(tǒng)應(yīng)有彩色觸摸屏;低功耗、高速度的處理芯片;帶有嵌入式操作系統(tǒng);GPS信息接收模塊;sd卡用以存放地圖; 模塊框圖分別如圖1所示:
11、; 圖1 系統(tǒng)結(jié)構(gòu)框圖 System Structure Diagram 1.2 部分模塊設(shè)計方案 控制模塊設(shè)計方案 方案一:采用凌陽公司的16位單片機(jī),它是16位控制器,具有體積小、驅(qū)動能力高、集成度高、易擴(kuò)展、可靠性高、功耗低、結(jié)構(gòu)簡單、中斷處理能力強(qiáng)等特點。用于語音處理和識別等領(lǐng)域。滿足系統(tǒng)GPS模塊和語音導(dǎo)航功能的需要。由于本系統(tǒng)需要彩色人機(jī)交互界面,對處理速度要求較高,故不采用。 方案二:采用samsung公司的
12、s3c2440。S3c2440采用ARM920t內(nèi)核,實現(xiàn)了MMU、ARBA、BUS和Harvard高速緩沖體系結(jié)構(gòu)。是一塊高性能、低功耗的嵌入式芯片。可植入操作系統(tǒng)。在個人PDA領(lǐng)域應(yīng)用及廣。植入操作系統(tǒng)后,在用戶GUI編程方面具有很大優(yōu)勢。內(nèi)置AD/DA,便于擴(kuò)展語音模塊。故選用此芯片為主控芯片。 1. 2. 2 操作系統(tǒng)選擇方案 Linux操作系統(tǒng)廣泛應(yīng)用在嵌入式設(shè)備中,其源代碼開放、免費(fèi);內(nèi)核性能高效、多任務(wù)、可制定;完善的圖形管理、文件管理機(jī)制;良好的開發(fā)環(huán)境、強(qiáng)大的工具集 。 可移植QT開發(fā)環(huán)境,可實現(xiàn)跨平臺的編
13、譯,代碼重用率高。 1.2.3 GPS模塊選擇方案 方案一:采用串口接口GPS模塊。優(yōu)點:便于驅(qū)動,價格便宜。缺點:嵌入式linux的調(diào)試需要用到串口,若GPS模塊占用了串口會造成調(diào)試不便。故不采用 方案二:采用usb接口GPS模塊。優(yōu)點:便于攜帶、連接開發(fā)板。缺點:驅(qū)動相對較難、價格相對較貴。為了便于調(diào)試和攜帶,采用usb接口GPS模塊。 3 方案一:采用LCD顯示。液晶顯示屏(LCD)具有輕薄短小,低耗電
14、量。但不能實現(xiàn)觸摸功能,故部采用。 方案二:采用TFT顯示。TFT屏幕帶有四線式電阻觸摸膜,能實現(xiàn)觸摸功能、便于用戶操作,故采用。 方案一:采用s3c2440核心板內(nèi)置nand flash 存放。Nand flash 讀取速度快。但容量較小,只有128M,不適合存放大量地圖數(shù)據(jù),故不采用。 方案二:采用外置sd卡。Sd卡讀取速度相對較慢,且會增加成本。但能存放大量數(shù)據(jù)(),地圖更新升級也很方便。故采用。 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) 操作系統(tǒng): 采用嵌入式linux操作系統(tǒng) 2 系統(tǒng)的硬件設(shè)計與實現(xiàn) 系統(tǒng)硬件采用友善之臂的s3c2440 mini2440開發(fā)板。Mini2440 體積小,便于攜帶;接口豐富,易于擴(kuò)展;功耗低,便于長時間戶外導(dǎo)航。 Mini2440硬件特性如下圖: 4 圖2 主控芯片電路 Fig.2 Master-chip circuitry 2.1 主控芯片電路
17、 主控芯片為s3c2440的6層核心板,該核心板性能穩(wěn)定、工藝精良。 5 6 圖2.1 主控芯片電路 Fig.2.1 Circuit of ultrasonic transmitting and receiving 2.2 flash芯片電路 2.21 nand flash芯片電路 Nand flash 是操作系統(tǒng)的程序存儲區(qū),該芯片掉電不丟失數(shù)據(jù)、壽命長,可反復(fù)擦寫。芯片
18、容量128M。適合存放高密度數(shù)據(jù)結(jié)構(gòu) 圖2.2.1 主控芯片電路 Fig.2.2.1 Circuit of ultrasonic transmitting and receiving 2.22 nor flash芯片電路 Nor flash是系統(tǒng) BIOS 存儲區(qū)。該芯片掉電不丟失數(shù)據(jù)、壽命長,可反復(fù)擦寫。芯片容量8M。適合高速度、低數(shù)據(jù)密度的數(shù)據(jù)結(jié)構(gòu)。 7 圖2.2.2 主控芯片電路 F
19、ig.2.2.2 nor flash chip circuitry 2.3 串口電路 采用max3232電平轉(zhuǎn)換芯片與計算機(jī)通信 8 圖2.3 串口電路 Fig.2.3 Serial circuit 2.4 usb端口電路 采用usb2.0協(xié)議,usb接口用以連接gps模塊 圖2.4 us
20、b端口電路 Fig.2.4 Driving circuit 2.5 系統(tǒng)總線及l(fā)cd接口電路 9 Fig.2.5 Driving circuit 2.6 電源電路 圖2.6 電源電路 Fig.6 Power circuit 10 3 系統(tǒng)的軟件設(shè)計
21、0;本系統(tǒng)的所有程序均采用C+語言編寫,開發(fā)工具為QT embed 2.0。程序定義了許多類來分別管理各個模塊,通過對各個類的操作,來構(gòu)建整個程序框架。 3.1 程序整體結(jié)構(gòu)框圖 圖3.1 maintab類流程圖 Fig.3.1 Diagram of the overall structure of program 3.2 Maintab類 Maintab 類負(fù)責(zé)程序外框基本定義及程序初始化
22、60; 圖3.2 maintab類流程圖 Fig.3 .2 maintab Class Flowchart 3.3 mainwidgt類 Mainwidgt類負(fù)責(zé)對各個按鈕部件、頁面部件的初始化 圖3.3 mainwidget 類流程圖 Fig.3.3 mainwidget class Flowchart 3.4 config類流程圖 Config類用以實現(xiàn)對地圖路徑、gps模塊波特率的設(shè)置
23、12 圖3.4 config 類流程圖 Fig.3.4 config class Flowchart 3.5 map類 Map類負(fù)責(zé)讀取mapinfo文件里的地圖 ,并顯示對應(yīng)地圖。 地圖顯示算法:首先把地圖分割成n*n小塊。然后系統(tǒng)通過得知整張地圖四角的坐標(biāo),計算出地圖每個像素點所對應(yīng)的坐標(biāo)。最后根據(jù)讀取的gps信息,找到對應(yīng)的地圖,并顯示到lcd上。 圖3.5 map 類流程圖 Fig.
24、3.5 map class Flowchart 3.6 gps_diver類 gps_diver類負(fù)責(zé)驅(qū)動gps模塊,gps驅(qū)動原理如下所述: 1227.60HMz的L2載波。L1為民用頻率,L2為軍用。民用GPS信號調(diào)試成C/A碼發(fā)送,C/A碼又被稱為粗捕獲碼,是1MHz的偽隨機(jī)噪聲碼(PRN碼),其碼長為1023位(周期為1ms)。用戶機(jī)接受到C/A碼后,通過gps接受器,解調(diào)為發(fā)送次C/A碼的衛(wèi)星時間。并通過多個衛(wèi)星發(fā)送的C/A碼時間差(至少3個),來確定當(dāng)前位置。并以串口的形式把經(jīng)緯度數(shù)據(jù)發(fā)送給上位機(jī)。
25、60; 14 圖3.6 gps_driver類流程圖 Fig.3.6 gps_driver class Flowchart 3.7 staSNR類 StaSnR類負(fù)責(zé)對檢測衛(wèi)星數(shù)量,并告知gps_driver類。 圖3.7 strSNR類流程圖 Fig.3.7 strSNR class Flowchart 3.8
26、 debugPDF類 debugPDF類負(fù)責(zé)提供調(diào)試信息,錯誤編號等內(nèi)容。調(diào)試程序時,配合linux中g(shù)db命令。 能實現(xiàn)斷點調(diào)試、逐步調(diào)試等功能并顯示對應(yīng)的錯誤信息。 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:正常工作的,能顯示工作運(yùn)行主流程error exit fatal show it 2:更進(jìn)一顯示信息 3:完全跟蹤! 3.9 Makefile文件 Makefile文件為整個工程的管理文件 ,作用是連接各個頭文件、c文件,最終編譯成可執(zhí)行文件。由于使用qt開發(fā)環(huán)境,程序可以在x86平臺上與arm平臺上分別運(yùn)行。只需要修改Makefil
29、e文件中的編譯期即可。 3.10 地圖文件(mapinfo.txt 文件) 地圖文件由一大張成都市區(qū)地圖分割成許多小地圖。Map.cfg文件里包含了整張地圖信 16 息。mapinfo:103.831787,30.687817,104.314155,30.473525,1500,1200,300。分別代表整個地圖的左上角經(jīng)緯度、右下角經(jīng)緯度、地圖像素的長度、地圖像素的寬度、每張地圖的像素寬度。軟件通過讀取map.cfg的內(nèi)容,來獲取地圖的基本信息。 地圖軟件獲取方法:采用專業(yè)地圖下
30、載軟件 UMD(universal maps download),用戶只需在此軟件里輸入想要地圖的四角經(jīng)緯度坐標(biāo)。即可得到所需地圖。保證mapinfo.txtL里的地圖坐標(biāo)與實際坐標(biāo)一致。 4 測試 4.1 操作系統(tǒng)燒寫測試 安裝操作系統(tǒng)測試的目的是搭建系統(tǒng)的軟件環(huán)境,便于后續(xù)工作 安裝linux有如下步驟 1. 格式化nand flash 2. 安裝bootloader 3. 安裝內(nèi)核文件 4. 安裝文件系統(tǒng)
31、60; 如下圖所示 17 圖4.1.1 燒寫操作系統(tǒng)-vivi界面 Fig.4.1.1 Flow chart of program of cooling automatically 安裝好操作系統(tǒng)后,重啟系統(tǒng),將出現(xiàn)如下畫面。 圖 4.1.2 操作系統(tǒng)啟動畫面 Figure 4.1.2 operating system to start screen
32、系統(tǒng)燒寫成功 4.2 衛(wèi)星接收測試 衛(wèi)星接收測試的目的是檢測接收到衛(wèi)星的數(shù)量,以便在接收到相同衛(wèi)星的情況下,檢測gps信號。測試位置:四川省成都市。 第一次測試:位置室內(nèi) 衛(wèi)星數(shù)量 0 如下圖: 18 圖 4.2.1 第一次衛(wèi)星接收測試 Figure 4.2.1 The first test satellite reception 第二次測試:位置室外空曠地帶 衛(wèi)星數(shù)量 7 如下圖: 圖 4
33、.2.2 第二次衛(wèi)星接收測試 Figure 4.2.2 The second test satellite reception 第三次測試:位置街道 衛(wèi)星數(shù)量 6 如下圖: 19 圖 4.2.3 第三次衛(wèi)星接收測試 Figure 4.2.2 The third test satellite reception 經(jīng)測試,在室內(nèi)不能接收到衛(wèi)星的gps信號。故此系統(tǒng)只能在戶外使用。 4.3 地圖顯示測試 地圖顯示測試
34、的目的是測試載入地圖的正誤、驗證地圖上下左右移動的功能。 第一次測試: 能實現(xiàn)上下左右移動,顯示地圖如下圖: 20 Figure 4.3.1 The first map shows test 第二次測試:能實現(xiàn)上下左右移動,顯示地圖如下圖: 21 圖 4.3.2 第二次地圖顯示測試 第三次測試:能實現(xiàn)上下左右移動,顯示地圖如下圖: Figure 4.3.2 The second map
35、shows test 圖 4.3.3 第三次地圖顯示測試 Figure 4.3.3 The third map shows test 經(jīng)測試地圖能準(zhǔn)確的載入,并能實現(xiàn)上下左右移動的功能 4.4 gps信號檢測測試 Gps信號測試的目的是測試gps信號的精確度,測試數(shù)據(jù)列于表3中。 表3 gps數(shù)據(jù)測量表 22 從上表
36、可以看出,gps數(shù)據(jù)精確度較高,誤差都在0.01%左右 4.5 功耗測試 測試環(huán)境:戶外 系統(tǒng)使用硬件:gps模塊、sd卡、液晶屏 從上表可看出,系統(tǒng)功耗在1w左右。能滿足設(shè)計技術(shù)指標(biāo)。 4.6 其他測試 1)地圖路徑變更測試 。 功能實現(xiàn),測試通過 2)gps串口波特率設(shè)置。 功能實現(xiàn),測試通過 4.7 測試結(jié)果分析 由以上的測試數(shù)據(jù)可以看出:
37、本GPS導(dǎo)航系統(tǒng)能很好地實現(xiàn)題目要求的各項功能。測試期間運(yùn)行穩(wěn)定,基本達(dá)到了設(shè)計要求。 5 總結(jié) 23 本系統(tǒng)成功的模擬了個人手持gps導(dǎo)航系統(tǒng)。用戶通過點擊觸摸屏幕、方便的使用軟件。實現(xiàn)了地圖的顯示、拖動;gps信息、衛(wèi)星數(shù)量的顯示;地圖路徑的更改;gps波特率的更改的功能。系統(tǒng)低功耗、高處理速度、操作簡易、界面有好。已具有一定的實用價值。 通過這次畢業(yè)設(shè)計,我在更加牢固、靈活地掌握了所學(xué)的專業(yè)知識的同時。大量學(xué)習(xí)了嵌入式方面
38、的相關(guān)知識:arm體系結(jié)構(gòu)、操作系統(tǒng)、c+編程、shell編程、硬件驅(qū)動程序。 參考文獻(xiàn): 1 杜春雷 ARM體系結(jié)構(gòu)與編程 清華大學(xué)出版社 2003-08-12 2 c+語言程序設(shè)計(第三版) 鄭莉 董淵 張瑞豐 編著 清華大學(xué)出版社 2001-10-11 3 嵌入式系統(tǒng)開發(fā) 齊宇 徐俊 編著 人民郵電出版社 2005-06-05 4 美Douglas Boling 嵌入式linux編程 北京科彥科技發(fā)展公司 譯 北京大學(xué)出版社 2003-03-12
39、0; 5 張洪斌 QT編程指南 電子科技大學(xué)出版社 2006-06-12 6 李先力 文蒼茂 GPS原理及應(yīng)用清華大小而出版社 2004-08-27 8 李新峰 何廣生 趙秀文 基于ARM9的嵌入式Linux開發(fā)技術(shù) 電子工業(yè)出版社2003-03-18 9Thomas L.Floyd.Electronic Devices M. Prentice-Hall Inc, New jersey 1999-05-19 致謝 至此,我的
40、畢業(yè)設(shè)計已經(jīng)基本完成。回想過去的點點滴滴,如果沒有學(xué)校、學(xué)院、老師、同學(xué)的關(guān)心和幫助,我也無法按期完成這令我滿意的作品。 在此,我首先感謝學(xué)校和學(xué)院為我提供優(yōu)越的實驗場所和器材,使我能夠更加方便、順利地進(jìn)行作品設(shè)計與調(diào)試,減少了設(shè)計周期; 其次,我要感謝指導(dǎo)老師周永宏老師在百忙之中抽出時間同我一起探討系統(tǒng)構(gòu)架和軟件的編寫,并不厭其煩地替我修改論文,給我了莫大的幫助,并使我學(xué)到了很多東西。周老師嚴(yán)謹(jǐn)負(fù)責(zé)的治學(xué)態(tài)度,給我留下了深刻的印象,將使我終身受益。我再次對周老 24 師這一年多來對我的關(guān)心和幫助表示最
41、誠摯的謝意; 最后,向在整個設(shè)計過程中關(guān)心和幫助過我的其他老師和同學(xué)致謝。 附錄: 附錄1:測試儀器 表7 測試儀器設(shè)備清單 附錄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"); /=設(shè)置好衛(wèi)星信號強(qiáng)度數(shù)據(jù)! 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位異或包括","的運(yùn)算,但不包括"$" 及 "*" 定義符號的運(yùn)算。 最后的兩位是檢驗碼的hex(16進(jìn)制)轉(zhuǎn)成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; /保證是環(huán)狀的FIFO。 PDF(2,"buffer fulln"); return -1; priv->bufferpriv->w_idx = data; priv->w_idx = (priv->w_idx + 1) % BUFSIZE; /保證是環(huán)狀的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;/保證是環(huán)狀的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;/取整數(shù)部分 ffx=fi-ffz;/取小數(shù)部分 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 并不能由空值來輸入浮點數(shù)。 / 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 天津遠(yuǎn)洋萬和城高端產(chǎn)品打造案例
- 2025年大壩建設(shè)合作協(xié)議書
- 2025年錳粉系列項目建議書
- 高性能網(wǎng)絡(luò)漏洞掃描數(shù)據(jù)分析系統(tǒng)租賃與定制服務(wù)合同
- 展覽現(xiàn)場安保人員調(diào)度與補(bǔ)充協(xié)議
- 物流運(yùn)輸授權(quán)分成補(bǔ)充協(xié)議
- 智能家居解決方案性能優(yōu)化補(bǔ)充協(xié)議
- 商業(yè)步行街商業(yè)地產(chǎn)租賃與委托運(yùn)營服務(wù)協(xié)議
- 跨行業(yè)戰(zhàn)略合作收益分成補(bǔ)充協(xié)議
- 海外合同文本翻譯及國際法律認(rèn)證合同
- 工業(yè)4.0新篇章介紹
- 中華人民共和國統(tǒng)計法
- 醫(yī)院員工價值取向培訓(xùn)
- 視源股份 合伙人協(xié)議
- 主題班會課:以夢為馬-不負(fù)韶華
- 電子技術(shù)技能與實訓(xùn)電子教案12 CD4511顯示譯碼功能測試
- 《剪映專業(yè)版:短視頻創(chuàng)作案例教程(全彩慕課版)》 課件 第9章 創(chuàng)作文藝短片
- DB11T 2194-2023 防汛隱患排查治理規(guī)范在建工程
- 風(fēng)機(jī)基礎(chǔ)降水施工實施方案
- 門禁系統(tǒng)施工技術(shù)方案
- 2024光熱電站化鹽操作標(biāo)準(zhǔn)
評論
0/150
提交評論