《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > PC與嵌入式系統(tǒng)的多線(xiàn)程串行通信實(shí)現(xiàn)
PC與嵌入式系統(tǒng)的多線(xiàn)程串行通信實(shí)現(xiàn)
摘要: 敘述了PC機(jī)與嵌入式計(jì)算機(jī)系統(tǒng)的多線(xiàn)程串行通信的實(shí)現(xiàn)。介紹了多線(xiàn)程設(shè)計(jì)思想的必要性,給出了程序設(shè)計(jì)流程。...
Abstract:
Key words :

  1、引言

  目前,先進(jìn)的嵌入式計(jì)算機(jī)以其優(yōu)良的品質(zhì)、高可靠性及模塊化,廣泛地應(yīng)用于工業(yè)控制、航空航天、醫(yī)療、智能儀表、通信、數(shù)控、自動(dòng)化生產(chǎn)設(shè)備、數(shù)據(jù)采集等領(lǐng)域。在實(shí)際應(yīng)用中,有時(shí)需要借助微機(jī)強(qiáng)大的數(shù)據(jù)處理能力和豐富的軟件資源,使得組成的系統(tǒng)功能更為強(qiáng)大。這樣,為了提升系統(tǒng)的整體性能,必須實(shí)現(xiàn)PC機(jī)和嵌入式計(jì)算機(jī)之間的通信。在導(dǎo)航儀生產(chǎn)管理中,由于串行通信具有連接簡(jiǎn)單、使用靈活方便、數(shù)據(jù)傳遞可靠等優(yōu)點(diǎn),采用串行通信方式進(jìn)行數(shù)據(jù)下載。但由于Windows 95/98對(duì)系統(tǒng)底層操作采取了屏蔽的策略,不允許用戶(hù)對(duì)硬件I/O口進(jìn)行直接操作,進(jìn)行串行通信只能通過(guò)調(diào)用API函數(shù)來(lái)完成;同時(shí)Windows 9x通過(guò)消息隊(duì)列驅(qū)動(dòng)管理程序,DOS中斷服務(wù)例程在其下面也很難實(shí)現(xiàn),且實(shí)時(shí)性和可靠性都得不到保證;因此通過(guò)多線(xiàn)程編程解決這一問(wèn)題,且能提高數(shù)據(jù)傳輸?shù)耐掏铝亢蛻?yīng)用程序的可靠性。

  2、系統(tǒng)功能簡(jiǎn)介及基本結(jié)構(gòu)

  本文以導(dǎo)航儀生產(chǎn)管理系統(tǒng)為背景進(jìn)行論述。現(xiàn)場(chǎng)的嵌入式計(jì)算機(jī)給PC機(jī)上傳所存儲(chǔ)的信息,并從PC上下載最新的版本信息。而嵌入式計(jì)算機(jī)發(fā)送回來(lái)的數(shù)據(jù)可以通過(guò)PC機(jī)的人機(jī)界面生動(dòng)實(shí)時(shí)地向用戶(hù)顯示。系統(tǒng)基本結(jié)構(gòu)如圖1所示。PC機(jī)與嵌入式計(jì)算機(jī)(從機(jī))之間按照RS-485協(xié)議連接。

  3、多線(xiàn)程串行通信實(shí)現(xiàn)流程

  3.1 用API函數(shù)實(shí)現(xiàn)串行通信的基本流程

  如圖2所示,首先CreatFile()函數(shù)打開(kāi)通信資源,之后配置通信資源屬性由以下API函數(shù)完成:SetupComm()設(shè)置串行通信端口的輸入和輸出緩沖區(qū)的大小;通過(guò)設(shè)備控制塊DCB修改和設(shè)置串口工作狀態(tài)的參數(shù),如波特率、數(shù)據(jù)位、奇偶校驗(yàn)位等通信參數(shù),SetCommState()將DCB結(jié)構(gòu)中的內(nèi)容寫(xiě)入串口設(shè)置;SetCommTimeouts()設(shè)置串口讀寫(xiě)操作的溢出時(shí)間。設(shè)置工作完成后串行通信可用ReadFile( )對(duì)通信資源進(jìn)行讀操作,WriteFile()進(jìn)行寫(xiě)操作。

  串行通信結(jié)束時(shí)調(diào)用函數(shù)CloseHandle()來(lái)關(guān)閉CreateFile()函數(shù)返回的串口句柄。

  3.2  PC機(jī)的程序?qū)崿F(xiàn)流程

  多線(xiàn)程的串口I/O通信編程中,將對(duì)串口的讀、寫(xiě)操作視為同一進(jìn)程的兩個(gè)不同任務(wù),創(chuàng)建讀線(xiàn)程和寫(xiě)線(xiàn)程分別完成對(duì)串口的讀、寫(xiě)操作;由于異步串行通信事件的隨機(jī)性和實(shí)時(shí)性,要求通信線(xiàn)程優(yōu)先于主線(xiàn)程被處理,所以設(shè)置各線(xiàn)程的優(yōu)先級(jí)別如下:

  讀線(xiàn)程的優(yōu)先級(jí)>寫(xiě)線(xiàn)程的優(yōu)先級(jí)>主線(xiàn)程的優(yōu)先級(jí)。

  在PC機(jī)端,創(chuàng)建輔助線(xiàn)程實(shí)時(shí)監(jiān)視串口通信狀態(tài),并由串口通信監(jiān)視線(xiàn)程根據(jù)通信狀態(tài)向主線(xiàn)程發(fā)送相應(yīng)的消息,由主線(xiàn)程分析處理。多線(xiàn)程串行通信法的最大優(yōu)點(diǎn)是程序?qū)邮諗?shù)據(jù)具有自主覺(jué)察能力,一旦輔助的通信監(jiān)視線(xiàn)程查詢(xún)到數(shù)據(jù)已經(jīng)發(fā)送到串行口上,輔助線(xiàn)程自動(dòng)接收數(shù)據(jù)后,向主線(xiàn)程發(fā)送數(shù)據(jù)接收到的消息,應(yīng)用程序可根據(jù)該消息來(lái)處理通信串口傳送過(guò)來(lái)的數(shù)據(jù),并且采用通信監(jiān)視線(xiàn)程不占用CPU時(shí)間。

  程序?qū)崿F(xiàn)建立輔線(xiàn)程:串口讀線(xiàn)程,完成串口通信操作,用來(lái)監(jiān)視和管理串口通信的輸入。讀線(xiàn)程一直等待,從通信串口讀取數(shù)據(jù)并傳輸給主線(xiàn)程處理。主線(xiàn)程除完成串口通信資源的打開(kāi)、參數(shù)配置以及關(guān)閉的工作外,還要完成讀線(xiàn)程的創(chuàng)建及關(guān)閉、多線(xiàn)程的協(xié)調(diào)、數(shù)據(jù)的中間處理與前端的人機(jī)交互等工作。

  圖3為PC機(jī)的串口通信流程圖。左邊為主線(xiàn)程,右邊為子線(xiàn)程。實(shí)線(xiàn)框內(nèi)為用戶(hù)界面的視類(lèi)函數(shù),虛線(xiàn)框內(nèi)為通信類(lèi)函數(shù)。用戶(hù)通過(guò)VC設(shè)計(jì)的界面上的控件打開(kāi)串口,并且發(fā)送數(shù)據(jù)。當(dāng)對(duì)串口的參數(shù)設(shè)置完畢,串口成功打開(kāi)的同時(shí),子線(xiàn)程即接收線(xiàn)程開(kāi)始運(yùn)行。用戶(hù)發(fā)送數(shù)據(jù)的同時(shí),接收線(xiàn)程的控制函數(shù)也同時(shí)運(yùn)行,當(dāng)控制函數(shù)接收到讀串口事件時(shí),調(diào)用讀串口函數(shù),讀取串口接收到的數(shù)據(jù)。子線(xiàn)程一直運(yùn)行,也不斷的讀取接收到的數(shù)據(jù),并顯示在用戶(hù)的界面上。當(dāng)用戶(hù)關(guān)閉串口,主線(xiàn)程要終止,此時(shí)子線(xiàn)程也收到主線(xiàn)程發(fā)送的關(guān)閉串口事件,終止線(xiàn)程,關(guān)閉串口。

  在實(shí)際通信過(guò)程中,由于干擾等原因,數(shù)據(jù)傳輸可能發(fā)生錯(cuò)誤,因此還要加上實(shí)時(shí)錯(cuò)誤處理以保證數(shù)據(jù)正常傳輸。這里不再贅述。

  3.3  嵌入式從機(jī)的程序?qū)崿F(xiàn)流程

  在嵌入式從機(jī)部分,通信實(shí)現(xiàn)采用的是單線(xiàn)程,初始化設(shè)備之后等待通信數(shù)據(jù),如果數(shù)據(jù)到達(dá),則調(diào)用接收函數(shù)接收PC機(jī)數(shù)據(jù),并將數(shù)據(jù)解析,返回結(jié)果向PC機(jī)發(fā)送數(shù)據(jù)。如果沒(méi)有數(shù)據(jù)則繼續(xù)等待。程序流程圖如圖4所示

  4、 結(jié)束語(yǔ)

  本文分析了多線(xiàn)程技術(shù)在實(shí)現(xiàn)PC機(jī)與單片機(jī)串口通信程序中的作用。通過(guò)兩個(gè)通信線(xiàn)程并發(fā)執(zhí)行,加以同步管理,應(yīng)用程序能夠在發(fā)送數(shù)據(jù)的同時(shí)接收數(shù)據(jù),實(shí)時(shí)響應(yīng)性強(qiáng),高效可靠,有效地避免了數(shù)據(jù)丟失、程序鎖死等問(wèn)題。在實(shí)際應(yīng)用中結(jié)果令人滿(mǎn)意。

  參考文獻(xiàn):

  [1] Mark Nelson. 串行通信開(kāi)發(fā)指南.瀟湘工作室譯.M. 北京:中國(guó)水利水電出版社,2000.
  [2]求是科技 譚思亮等.Visual C++串口通信工程開(kāi)發(fā)實(shí)例導(dǎo)航.M.北京:人民郵電出版社,2001
  [3]李朝青. PC機(jī)與單片機(jī)數(shù)據(jù)通信技術(shù).C. 北京:北京航空航天大學(xué)出版社,2001.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
主站蜘蛛池模板: 久久精品高清视频 | 免费视频一区二区 | 91久久在线 | 亚洲天堂免费在线视频 | 萌白酱香蕉白丝护士服喷浆 | 精品一区二区久久 | 午夜剧场成年 | 久久久久久毛片免费播放 | 99在线小视频 | 久久精品一区二区三区中文字幕 | 亚洲黄色片网站 | 成人国产精品高清在线观看 | 日韩一区二区中文字幕 | 精品欧美高清一区二区免费 | 国产免费高清 | 亚洲男人的性天堂 | 欧美野外性xxxxfeexxxxx | 久久亚洲一级α片 | 亚洲另类自拍 | 久久久久成人精品一区二区 | 久青草免费视频手机在线观看 | 国产精选在线 | 欧美日韩精品一区二区 | 亚洲精品国产第一区第二区国 | 欧美孕妇性xxxⅹ精品hd | 欧美区一区二区三 | 久久r这里只有精品 | 一级片日韩| 欧美一区二区在线免费观看 | 欧美巨大video粗暴 | 国产欧美一区二区 | 国产午夜人做人视频羞羞 | 制服诱惑中文字幕 | 欧美片能看的一级毛片 | 欧美激情一区二区亚洲专区 | 欧美色视频日本片免费高清 | 日本理论片免费高清影视在线观看 | 欧美一区二区视频 | 91免费看国产 | 国产精品亚洲专一区二区三区 | 免费观看性欧美大片无片 |