娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年02月27日(星期四)

正在發生

2018年02月27日 | Windows CE.NET 4.2中PC與單片機的串行通信

發布者:幸福夢想 來源: eefocus關鍵字:Windows  NET  PC  單片機  串行通信 手機看文章 掃描二維碼
隨時隨地手機看文章

在工業控制中,常需要將單片機采集到的數據傳送給PC機處理、顯示,并且根據處理結果給單片機發送控制命令。串行通信雖然傳送速度相對較慢,但是傳送成本低,對實現監視和控制,具有足夠的帶寬,并且沒有過于復雜的編解碼,實現自定義的協議也不復雜,因而在工業自動化、通信和軍事等領域的應用十分廣泛。隨著Windows CE嵌入式操作系統在工業控制中的廣泛應用,設計和實現Windows CE下PC與單片機的串行通信具有重要的意義。


1Windows CE.NET 4.2簡介

Windows CE 是一個面向移動計算和嵌入式應用的操作系統,其突出優點是模塊化、可定制性、完備性、實時性、通信能力強大和基于Win32應用程序編程接口。 Windows CE.N ET 4.2是為嵌入式市場重新設計的Windows CE 3.0的后繼產品,為快速建立下一代智能移動和小內存占用的設備提供了一個健壯的實時操作系統。他包括創建一個基于定制設備的Wi ndows CE所需的一切。

2Windows CE.NET 4.2下的串行通信技術

 串行端口在Windows CE.NET 4.2(以下簡稱Windows CE)下屬于流接口設備,他是串行設備接口常規I/O驅動程序的調用與通信相關的具體函數的結合。串行設備被視為用于打開、關閉和讀寫串行端口的常規的可安裝的流設備。Windows CE的串口函數和Windows的串口函數基本相同,但有幾點值得注意:

 (1)Windows CE只支持UnICode字符集,在編程時必須特別注意。

 (2) Windows CE不支持重疊的I/O操作。

2.1打開和關閉串行端口

在所有的流設備驅動程序中,均使用CreateFile來打開串行端口設備,如果這個端口不存在,CreateFile返回 ERROR_FILE_NOT_FOUND。因此,用戶指定的端口必須是存在并且可用的,而且要遵循Windows CE流接口設備驅動程序的命名規則,即COM后接要打開的端口號再緊跟一個冒號。
    HANDLE hPort = CreateFile (_T("COM1:"), 
    GENERIC_READ|GENERIC_WRITE, 0,NULL,
    OPEN_EXISTING,0,NULL);

關閉串行端口比較簡單,調用CloseHandle函數就能關閉一個打開的串行端口。CloseHandle只有一個參數,即調用CreateFile函數打開端口時返回的句柄,方法如下:

CloseHandle (hPort);

2.2讀寫串行端口

正如使用CreateFile打開串行端口一樣,可以使用ReadFile和WriteFile函數來讀寫串行端 口。假設已經調用CreateFile成功地打開了串行端口,那么只需調用ReadFile即可從串行端口讀取數據:

37.jpg

由于Windows CE不支持重疊的I/O操作,所以第5個參數必須設置為NULL。寫串行端口也很 簡單。調用過程如下:

38.jpg

如果從主線程讀、寫大量的串行數據,主線程就會因為等待相對較慢的串行讀或串行寫操作而阻塞,不能即時處理其他的消息。因此最好用單獨的線程來讀寫串行端口。

2.3配置串行端口

讀和寫串行端口比較簡單,但是還需要對端口配置好正確的波特率、字符長度、奇偶校驗、傳輸模式等,端口才能正確通信。可以調用I/O設備控制(IOCTL)來配置串行驅動程序,但此操作需要一些底層的知識,并且要有相應的“嵌入工具包”(ETK),而SDK不能實現該操作。除此之外,還有一種更簡單的方法,就是調用GetCommState和SetCommState函數配置串行端口。由于配置端口的DCB結構內容較多,所以使用起來比較麻煩。錯誤地初始化 DCB結構是配置串行端口常見的問題。如果一個串行通信函數沒有產生預期的效果,那么錯誤很可能是在DCB結構體的賦值。在與單片機實現串行通信的時候,由于只用到了RS 232串行口的RXD,TXD和GND三個引腳,而其他的引腳均舍棄不用,所以DCB的成員變量應該如下設置,否則不能正常通信:

39.jpg

2.4設置超時值

對于串行端口來說,還必須配置超時值,否則程序可能陷入到一個等待來自串口字符的死循環。通常,配置超時值和配置串口類似。首先用 GetCommTimeouts函數獲取當前串口的超時值,然后修改CommTimeouts成員變量的值,最后用SetCommTimeouts設置新的超時值。

2.5異步多線程通信

雖然Windows CE不支持重疊I/O,但還是可以使用多個線程來實現同樣的操作。當主線程正忙時,需要做的就是運行單獨的線程來處理同步I/O操作。除了使用用于讀和寫的單獨線程以外,Windows CE還支持Win32的WaitCommEvent函數,該函數將線程阻塞,直到預先設定的串行通信事件中的一個發生。該函數一般和函數 SetCommMask配合起來使用,SetCommMask設置WaitCommEvent要等待的串口事件。一般的使用方法是:


先調用SetCommMask函數設定要等待的串口事件,例如串口有數據到來(EV_RXCHAR)事件;然后在讀串口線程中調用WaitCommEvent阻塞線程,等待EV_RXCHAR事件的發生。當等

待的EV_RXCHAR事件發生時,調用ClearCommError函數清除通信錯誤信息,并且獲取串口的當前狀態,主要是獲取串口接收緩沖區中的字節數,然后調用ReadFile函數將接收緩沖區的數據全部讀出。最后調用PostMessage函數將這些數據發送給主線程進行處理。

這里存在一個問題:讀串口數據操作是在讀串口線程中進行的,而處理數據操作是在主線程中進行的,如果上次接收的數據還沒處理完,下次的數據又發送給了主線程處理,勢必造成混亂。這個問題的解決,涉及到線程間的同步機制。

2.6線程間的同步

在Windows CE中采用同步對象的方法來協調多線程的執行。一個線程監視一個同步對象,當用信號通知該對象時,解除正在阻塞的線程并調度該線程。同步對象包括事件和互斥體兩種方式。本文只介紹事件方式。

事件對象是一種有兩種信號狀態有信號和無信號的同步對象,創建的事件對象可以被不同的線程共享。Windows CE常用等待函數阻塞線程自身的執行,等待其監視的對象產生一定的信號才停止阻塞,繼續線程的執行。常用的等待函數有監視單個同步對象的 WaitForSingleObject,和監視多個同步對象的WaitForMultipleObjects。在Windows CE串口通信中,用CreateEvent函數創建事件時,手動設置為有信號狀態,以便程序在第一次能夠順利地進入到WaitCommEvent函數處等待串口數據的到來,等到程序讀取了串口的數據并發送給主線程處理后,調用ResetEvent函數將事件狀態設置成無信號狀態,線程就阻塞在 WaitForSingleObject函數處,一直等到主線程把接收到的數據處理完后,再將事件狀態用SetEvent函數設置成有信號狀態,釋放 WaitForSingleObject函數對線程的阻塞,重新進入WaitCommEvent函數處等待串口數據的到來。循環接收、處理串口數據的流程如圖1所示。

40.jpg

3完整的串行通信程序

頭文件定義: 

41.jpg

4結語

為了實現Windows CE下PC與單片機的串行通信,本串口通信程序采用自定義的通信協議,在運行Windows 2000的PC機上,用Embedded Visual C++4.0編寫,在PC機上編譯、調試成功后,下載到運行Windows CE.NET 4.2的工控機上運行,實現了和單片機的正確通信,獲得了很好的效果。本程序也能夠應用于其他類似的測控應用場合。


參考文獻 
[1]傅曦,齊宇.嵌入式系統Windows CE開發技巧與實例[M].北京:化學工業出版社,2003
[2]田東風.Windows CE應用程序設計[M].北京:機械工業出版社,2003
[3][美]Douglas Boling.MICroSOFt Windows CE程序設計[M].北京博彥科技發展有限公司譯.北京:北京大學出版社,1999
[4][美]Chris Muench. Windows CE權威指南[M].精英科技譯.北京:中國電力出版社,2001.


關鍵字:Windows  NET  PC  單片機  串行通信 引用地址:Windows CE.NET 4.2中PC與單片機的串行通信

上一篇:單片機數據通信:模擬SPI數據傳輸
下一篇:串行EEPROM X24128與AT89C51的接口及編程

推薦閱讀

  Canalys預估,蘋果在2017年第四季度已經出貨了2900萬臺iPhone X。對于非常昂貴的智能手機來說,這是一個巨大的市場。下面就隨手機便攜小編一起來了解一下相關內容吧。  三星將于2月25日推出其旗艦Galaxy?S9和Galaxy?S9?Plus智能手機。它們可以幫助三星重回全球智能手機出貨量老大位置。  最近有消息稱Galaxy?S9?Plus的售價可能高達997歐元(1...
是德科技(NYSE:KEYS)推出第一款雙通道微波信號發生器,該產品可在同一臺儀器中支持最高 44 GHz 的信號和 2 GHz 的射頻(RF)調制帶寬。是德科技是一家領先的技術公司,致力于幫助企業、服務提供商和政府客戶加速創新,創造一個安全互聯的世界。通過降低測試設置的復雜度并減少無線空口(OTA)測試環境下的路徑損耗,是德科技的新型 VXG 微波信...
  摘要本文以凌陽單片機作為控制板, 配合傳感器模組對周圍環境溫度和光線進行測量, 并對測量值進行語音播報, 成功地實現了環境測量儀的設計。  1 引言  隨著人們生活水平的提高, 各電子產品有了突飛猛進的發展, 電子測量儀也逐漸豐富起來, 在各行各業得到了廣泛的應用。例如, 在醫學方面, 有血糖測量儀, 血壓測量儀; 在物理學方...
魅族將于 3 月 2 日召開 Flyme 9 發布會,3 月 3 日召開魅族 18 系列 5G 雙旗艦發布會。今日魅族科技宣布,與京東之家達成全渠道深度合作,魅族 18 手機在京東之家線下店展示銷售,給予優惠樣機政策、新品首發專項貨源。  在海報中魅族還表示,雙方將進行全渠道線上、線下整合營銷合作,消費者可在門店體驗新機,魅友活動可在...

史海拾趣

問答坊 | AI 解惑

意法半導體(ST)傳感器終接芯片提高自動化數字輸入的性能

意法半導體日前推出一個雙通道終接芯片,新產品集成了輸入保護單元、一個串聯限流器和一個輸出驅動器,有助于提高工業自動化系統24V DC數字輸入模塊的性能和可靠性。     新產品PCLT-2AT4采用緊湊的TSSOP14表面組裝封裝,成本和電路 ...…

查看全部問答∨

我從本論壇下了一個單片機電子萬年歷的資料有問題想請教下各位高手

具體的問題是電路數碼管有的亮有的不亮,還有程序不運行請教下各位是什么問題啊 謝謝!!電路圖和程序都在附件中請大家幫幫忙看下市怎么回事?…

查看全部問答∨

給大家介紹個攝像機前端維修調試供電的應急簡易方法

帶個DC12V的電池就ok了 比如摩托車電池 還有很多系統里面都帶有后備電池都是DC12V的 要是這些都沒有也可以去商店買8個1.5V的干電池傳聯起來用也可以 用電池供電可以保證電的質量 用這個方法可以幫助判斷很多可能是電源引起的故障…

查看全部問答∨

PB5.0升級2008全年升級包后 定制內核 生成的NK.nb0無法運行

第一步:把PB5.0升級2008全年升級包,在優龍2410開發板資料提供的ARMSYS2410.pbxml基礎上把.net compact framework 2.0 add to OS,編譯通過,生成的NK.nb0(大小為29M),在DNW下可以通過USB下載到開發板,下載地址為0X30200000,下載后選擇Y運行, ...…

查看全部問答∨

關于移植6.0bsp時的kitl編譯

想把5.0的bsp移植到6.0,除了kitl,其他目錄都編譯通過了, 在整kitl時,發現了個問題,如下~~~ 這個是kitl目錄下的source文件 [code] TARGETNAME=KITL TARGETTYPE=DYNLINK DLLENTRY=KitlDllMain DEFFILE= NOLIBC=1 SOURCES= TARGETLIBS ...…

查看全部問答∨

請問,EVC的SDK到哪下載啊??

我有個支持WinCE.net的SDK,但是不好使,誰有個標準的SDK,或是下載地址?? 謝謝了…

查看全部問答∨

關于VC6.0代碼遷移至WINCE環境的問題

大家好,請教一下,我有個VC程序想遷移到WINCE下,不知道有沒有什么簡單快捷的修改方案,還是要重新在EVC下重新組織代碼? 是不是VC下的代碼并不完全被WINCE接受的?…

查看全部問答∨

急求UART問題!!!!!

緊急求助!!!!哪位高手指點一下,問題到底在哪里!!!謝謝了!!! 我用PIC24F16KA102單片機的UART1做串口通信程序,現在有個很棘手的問題:可以發送出去,但是接收不了(接收狀態標志沒有,也沒有產生中斷)。 下面是我的設置和接收程序: ...…

查看全部問答∨

原來用AVRMEGA64現在想換芯片,如果用STM8

                                 原來用AVR MEGA64 現在想換芯片, 如果用STM8,請高人推薦一下相近的型號,謝謝!…

查看全部問答∨

學習板教程 第一課——簡單LED

終于要把那一批51學習板的資料貼出來了,這些是我和搭檔們為配套開發板的學習而寫的一些基本的教程,當然有很多不好的地方,歡迎大家多多指教啊! 這一批配套資料目錄如下: 1.學習板教程 第一課——LED 2.學習板教程 第二課——流水燈 3.學習 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 饶阳县| 虎林市| 调兵山市| 扶风县| 塘沽区| 邵东县| 冀州市| 安龙县| 鹤峰县| 乌拉特前旗| 昌图县| 乌鲁木齐县| 涞源县| 托克逊县| 尚义县| 池州市| 曲阳县| 宜黄县| 东乌珠穆沁旗| 岚皋县| 厦门市| 谢通门县| 上高县| 中宁县| 德化县| 金沙县| 扎赉特旗| 安乡县| 嘉义县| 莫力| 方城县| 清水县| 申扎县| 南和县| 唐河县| 万载县| 宣汉县| 都兰县| 梁山县| 平南县| 江达县|