《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > PC與嵌入式系統的多線程串行通信實現
PC與嵌入式系統的多線程串行通信實現
摘要: 敘述了PC機與嵌入式計算機系統的多線程串行通信的實現。介紹了多線程設計思想的必要性,給出了程序設計流程。...
Abstract:
Key words :

  1、引言

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

  2、系統功能簡介及基本結構

  本文以導航儀生產管理系統為背景進行論述。現場的嵌入式計算機給PC機上傳所存儲的信息,并從PC上下載最新的版本信息。而嵌入式計算機發送回來的數據可以通過PC機的人機界面生動實時地向用戶顯示。系統基本結構如圖1所示。PC機與嵌入式計算機(從機)之間按照RS-485協議連接。

  3、多線程串行通信實現流程

  3.1 用API函數實現串行通信的基本流程

  如圖2所示,首先CreatFile()函數打開通信資源,之后配置通信資源屬性由以下API函數完成:SetupComm()設置串行通信端口的輸入和輸出緩沖區的大小;通過設備控制塊DCB修改和設置串口工作狀態的參數,如波特率、數據位、奇偶校驗位等通信參數,SetCommState()將DCB結構中的內容寫入串口設置;SetCommTimeouts()設置串口讀寫操作的溢出時間。設置工作完成后串行通信可用ReadFile( )對通信資源進行讀操作,WriteFile()進行寫操作。

  串行通信結束時調用函數CloseHandle()來關閉CreateFile()函數返回的串口句柄。

  3.2  PC機的程序實現流程

  多線程的串口I/O通信編程中,將對串口的讀、寫操作視為同一進程的兩個不同任務,創建讀線程和寫線程分別完成對串口的讀、寫操作;由于異步串行通信事件的隨機性和實時性,要求通信線程優先于主線程被處理,所以設置各線程的優先級別如下:

  讀線程的優先級>寫線程的優先級>主線程的優先級。

  在PC機端,創建輔助線程實時監視串口通信狀態,并由串口通信監視線程根據通信狀態向主線程發送相應的消息,由主線程分析處理。多線程串行通信法的最大優點是程序對接收數據具有自主覺察能力,一旦輔助的通信監視線程查詢到數據已經發送到串行口上,輔助線程自動接收數據后,向主線程發送數據接收到的消息,應用程序可根據該消息來處理通信串口傳送過來的數據,并且采用通信監視線程不占用CPU時間。

  程序實現建立輔線程:串口讀線程,完成串口通信操作,用來監視和管理串口通信的輸入。讀線程一直等待,從通信串口讀取數據并傳輸給主線程處理。主線程除完成串口通信資源的打開、參數配置以及關閉的工作外,還要完成讀線程的創建及關閉、多線程的協調、數據的中間處理與前端的人機交互等工作。

  圖3為PC機的串口通信流程圖。左邊為主線程,右邊為子線程。實線框內為用戶界面的視類函數,虛線框內為通信類函數。用戶通過VC設計的界面上的控件打開串口,并且發送數據。當對串口的參數設置完畢,串口成功打開的同時,子線程即接收線程開始運行。用戶發送數據的同時,接收線程的控制函數也同時運行,當控制函數接收到讀串口事件時,調用讀串口函數,讀取串口接收到的數據。子線程一直運行,也不斷的讀取接收到的數據,并顯示在用戶的界面上。當用戶關閉串口,主線程要終止,此時子線程也收到主線程發送的關閉串口事件,終止線程,關閉串口。

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

  3.3  嵌入式從機的程序實現流程

  在嵌入式從機部分,通信實現采用的是單線程,初始化設備之后等待通信數據,如果數據到達,則調用接收函數接收PC機數據,并將數據解析,返回結果向PC機發送數據。如果沒有數據則繼續等待。程序流程圖如圖4所示

  4、 結束語

  本文分析了多線程技術在實現PC機與單片機串口通信程序中的作用。通過兩個通信線程并發執行,加以同步管理,應用程序能夠在發送數據的同時接收數據,實時響應性強,高效可靠,有效地避免了數據丟失、程序鎖死等問題。在實際應用中結果令人滿意。

  參考文獻:

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

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 久久精品午夜一区二区福利| 亚洲色偷偷av男人的天堂| 精品丝袜国产自在线拍亚洲| 欧美成人在线视频| 免费一级大片儿| 欧美极品另类高清videos| 成人国产永久福利看片| 亚洲图片第一页| 爱情岛论坛亚洲品质自拍视频 | 好吊妞免费视频| 东京热无码一区二区三区av| 日本三级在线观看免费| 亚洲欧美日韩综合在线| 男女午夜特黄毛片免费| 国产在视频线在精品| 99ri在线观看| 好大好硬好爽好舒服| 三上悠亚亚洲一区高清| 我想看一级毛片免费的| 久久久久人妻精品一区蜜桃| 欧美日韩精品一区二区在线观看| 伊人久久大香线蕉综合影院首页| 韩国二级毛片免费播放| 国产成年无码久久久免费| aaaa级少妇高潮大片在线观看| 开心五月激情综合婷婷| 中文字幕.com| 春日野结衣女女| 亚洲精品天堂成人片AV在线播放 | 一本大道香蕉最新在线视频| 成人精品视频一区二区三区尤物| 亚洲AV永久无码一区二区三区| 精品91一区二区三区| 啊昂…啊昂高h| 老司机深夜福利影院| 国产AV天堂无码一区二区三区| 窝窝午夜看片成人精品| 国产精品色内内在线播放| 91国在线视频| 希崎杰西卡一二三区中文字幕| 中文字幕一区二区三区久久网站 |