www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 通信技術 > 通信技術
[導讀]摘 要:GPS導航系統(tǒng)需要實時獲取來自接收機串口的定位數(shù)據(jù),在對串口實時監(jiān)控的同時還可以在前臺進行一些其他的操作,利用基于多線程的串口通信編程思想方法可以很好地解決這一問題。介紹多線程的基本概念和串口通信

摘 要:GPS導航系統(tǒng)需要實時獲取來自接收機串口的定位數(shù)據(jù),在對串口實時監(jiān)控的同時還可以在前臺進行一些其他的操作,利用基于多線程的串口通信編程思想方法可以很好地解決這一問題。介紹多線程的基本概念和串口通信編程技術,分析了GPS導航系統(tǒng)的功能和需求,著重闡述了采用基于多線程的CSerialPort類的串口通信方法來獲取定位數(shù)據(jù),并且給出了CSerialPort類的使用方法。經(jīng)過調(diào)試,程序運行平穩(wěn)。
關鍵詞:多線程;串口通信;CSerialPort;GPS導航


0 引 言
    GPS(Global Position System)具有全球性、全天候性優(yōu)勢的定位、定時、測速系統(tǒng),用戶利用GPS接收機接收衛(wèi)星發(fā)射的信號,從而獲取當前位置的大地坐標、高程和時間等信息,達到定位、導航或測量高程的目的。衛(wèi)星導航定位技術被廣泛應用于海洋勘測、海洋工程、海洋開發(fā)和軍事作戰(zhàn)中,高精度、快捷方便、全天候等優(yōu)良特性,使其越來越受到人們的青睞。在GPS導航中,需要實時采集遵循NMEA0183協(xié)議的GPS數(shù)據(jù),對數(shù)據(jù)進行處理后,通過ODBC接口將用戶的位置、時間、速度等信息存到數(shù)據(jù)庫,為以后在電子地圖上實時顯示目標位置提供依據(jù)。為了避免由于一直等待串口I/0操作而引起的線程阻塞,要求程序在對串行端口進行實時監(jiān)控的同時,可以在前臺進行數(shù)據(jù)提取、保存、顯示等操作。為了解決實時性和多任務處理,避免某項任務長時間占用CPU,多線程編程是一個比較理想的選擇。


1 多線程概述
1.1 基本概念
    進程是程序在計算機上的一個執(zhí)行實例,線程是程序中的一條執(zhí)行分支,多線程就是在同一個程序中可以同時執(zhí)行多個任務。每一個進程至少有一個主執(zhí)行線程,它無需由用戶去主動創(chuàng)建,是由系統(tǒng)自動創(chuàng)建的。用戶根據(jù)需要在應用程序中創(chuàng)建其他線程,多個線程并發(fā)地運行于同一個進程中。
    一個進程中的所有線程都在該進程的虛擬地址空間中,共同使用這些虛擬地址空間、全局變量和系統(tǒng)資源。
1.2 VC
    VC++環(huán)境對多線程技術的支持visual c++6.0中,MFC類庫提供了對多線程編程的支持,使得多線程編程更加方便。MFC中有兩類線程,分別稱之為工作者線程和用戶界面線程。二者的主要區(qū)別在于工作者線程沒有消息循環(huán),而用戶界面線程有自己的消息隊列和消息循環(huán)。工作者線程通常用來執(zhí)行后臺計算和維護任務。用戶界面線程一般用于處理獨立于其他線程執(zhí)行之外的用戶輸入,響應用戶及系統(tǒng)所產(chǎn)生的事件和消息等。
1.3 線程創(chuàng)建、掛起、恢復、終止
    在MFC中,一般用全局函數(shù)AfxBeginThread()來創(chuàng)建并初始化一個線程的運行,該函數(shù)有兩種重載形式,分別用于創(chuàng)建工作者線程和用戶界面線程。Sus-pendThread()和ResumeThread()分別用于掛起指定的線程和恢復用SuspendThread()掛起的線程。Exit-Thread(DWORD dwExitC0de)用于線程終結(jié)自身的執(zhí)行。
1.4 線程同步
    線程之間經(jīng)常要同時訪問一些資源,因此對共享資源進行訪問引起沖突是不可避免的。為了解決這種資源沖突問題,必須引入線程同步的概念。Win32 API提供了多種同步控制對象來解決共享資源訪問沖突,包括使用臨界區(qū)、使用互斥對象、使用信號量、使用事件。


2 串口通信編程
    目前,在Windows下編程時,常用的串口通信主要有3種方法:用MSC0mm通信控件;用Windows API進行編程;使用第三方提供的一些串口通訊類進行編寫。
    (1)MSComm控件
    利用MSComm控件會使編程快捷簡單。然而,由于做了大量的封裝,降低了編程的可控性和靈活性,因此在多線程多串口編程時,需要做許多復雜的處理。
    (2)Windows API
    利用Windows API編寫串口程序,特別是復雜的多線程串口程序時,對于程序員的編程能力要求較高。除了需要程序員熟練掌握和使用眾多的API函數(shù),能編寫很多底層代碼之外,還必須熟悉線程的編程方法。
    (3)第三方串口通信類
    利用第三方的串口通信類進行串口編程時,既可以使編程效率高,程序可控性強,又比Window API編程簡單,其中應用最多的第三方的串口通信類是CSerial-Port。它基于多線程,是一個Win32 API的打包類,對處理串口的Win32 API類進行了封裝,借助這個類可以很方便地對串口進行操作,容易實現(xiàn)多線程的串口通信,編寫的程序在Windows 98/NT/2000/XP操作系統(tǒng)下可很好地運行。
    比較3種串口通信方式,可以發(fā)現(xiàn)使用第三方串口通信類CSerialPort是實現(xiàn)Windows下多線程串口編程的較好選擇。


3 多線程編程技術在GPS數(shù)據(jù)采集系統(tǒng)中的應用
3.1 GPS導航系統(tǒng)功能分析
    GPS導航是通過GPS定位技術實時給出用戶所在的位置,這就要求需要實時接收來自GPS接收機串口的定位數(shù)據(jù),在實時監(jiān)視串口的同時還需要進行數(shù)據(jù)存儲、顯示等,利用多線程串口通信技術將很好地解決這個問題。通過對GPS導航系統(tǒng)分析,將程序分成以下幾個線程:
    主線程:負責處理用戶界面的消息處理,按照預定義流程調(diào)度其他線程處理數(shù)據(jù)。
    串口監(jiān)視線程:監(jiān)視串口,采集數(shù)據(jù)并將數(shù)據(jù)保存到一個緩沖區(qū)。
    入庫線程:從緩沖區(qū)讀取數(shù)據(jù)進行相應處理并將處理好的數(shù)據(jù)存入數(shù)據(jù)庫。
    顯示線程:通過地圖匹配算法將用戶實時位置顯示在電子地圖上。
    GPS導航系統(tǒng)框圖如圖1所示。

3.2 具體實現(xiàn)
    系統(tǒng)首先對線程在相應的頭文件中說明,然后在程序初始化時加人創(chuàng)建程序代碼,這樣創(chuàng)建后,線程就可以和主線程并發(fā)執(zhí)行了。主線程、入庫線程、顯示線程與一般的編程處理相同,所以下面著重說明串口監(jiān)視線程。
    對串口的操作采用基于多線程編程的CSerialPort類,其工作流程如下:首先設置好串口參數(shù),再開啟串口監(jiān)測工作線程。串口監(jiān)測工作線程監(jiān)測到串口接收到的數(shù)據(jù)流、控制事件或其他串口事件后,就以消息方式通知主程序,激發(fā)消息處理函數(shù)進行數(shù)據(jù)處理,這是對接收數(shù)據(jù)而言的;發(fā)送數(shù)據(jù)可直接向串口發(fā)送。應用程序流程如圖2所示。

    編程步驟如下:
    (1)建立程序
    建立一個基于單文檔的MFC應用程序CSerial-PortTest,其他步驟保持缺省狀態(tài)。
    (2)添加類文件
    將SerialPort.h和SerialPort.cpp兩個類文件復制到工程文件夾中,用Project-Add to Project-Files命令將上述兩個文件加入工程,并在任何要調(diào)用這個類的模塊中加上#include SerialPort.h文件。
    在視類頭文件中定義串口類的對象:CSerialPortm_Port。
    (3)人工增加串口消息響應函數(shù)OnCommunica-tion(WPARAM ch,LPARAM port)
    首先在CSerialPortTestView.h中添加串口字符接收消息WM_COMM_RXCHAR(串口接收緩沖區(qū)內(nèi)有一個字符)的響應函數(shù)聲明,即:


    在主線程初始化串口后創(chuàng)建CommThread函數(shù)進入死循環(huán),線程一直監(jiān)視串口事件,當讀串口事件發(fā)生,讀取串口接收到的數(shù)據(jù),向主線程發(fā)自定義消息WM_COMM RXCHAR,通知主線程在相應的消息響應函數(shù)中進行數(shù)據(jù)處理,當收到主線程的寫串口命令時,將緩存中的數(shù)據(jù)寫到串口。
    (5)在OnCommunication()函數(shù)中進行數(shù)據(jù)處理每當串口接收緩沖區(qū)內(nèi)有一個字符時,就產(chǎn)生一個WM COMM RXCHAR消息,觸發(fā)OnCommunica—tion函數(shù)。這時就可以在函數(shù)中進行相應數(shù)據(jù)處理,提取出時間、經(jīng)緯度、速度等定位的關鍵數(shù)據(jù),然后將這些數(shù)據(jù)保存到數(shù)據(jù)庫。

4 結(jié) 語
    串行通訊在通訊領域被廣泛應用。利用基于多線程的第三方串VI通信類CSerialPort很好地解決了由于串口長時間占用CPU而引起的線程堵塞等問題,編程簡單、方便、可移植性強,對于其他類型的串口通信問題均可采用。該程序由Microsoft Visual C++6.0編譯,在Windows XP下運行通過。

本站聲明: 本文章由作者或相關機構(gòu)授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉