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

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 在工業(yè)控制中,常需要將單片機(jī)采集到的數(shù)據(jù)傳送給PC機(jī)處理、顯示,并且根據(jù)處理結(jié)果給單片機(jī)發(fā)送控制命令。串行通信雖然傳送速度相對(duì)較慢,但是傳送成本低,對(duì)實(shí)現(xiàn)監(jiān)視和控制,具有足夠的帶寬,并且沒(méi)有

在工業(yè)控制中,常需要將單片機(jī)采集到的數(shù)據(jù)傳送給PC機(jī)處理、顯示,并且根據(jù)處理結(jié)果給單片機(jī)發(fā)送控制命令。串行通信雖然傳送速度相對(duì)較慢,但是傳送成本低,對(duì)實(shí)現(xiàn)監(jiān)視和控制,具有足夠的帶寬,并且沒(méi)有過(guò)于復(fù)雜的編解碼,實(shí)現(xiàn)自定義的協(xié)議也不復(fù)雜,因而在工業(yè)自動(dòng)化、通信和軍事等領(lǐng)域的應(yīng)用十分廣泛。隨著WindowsCE嵌入式操作系統(tǒng)在工業(yè)控制中的廣泛應(yīng)用,設(shè)計(jì)和實(shí)現(xiàn)Windows CE下PC與單片機(jī)的串行通信具有重要的意義。


1Windows CE.NET 4.2簡(jiǎn)介

Windows CE 是一個(gè)面向移動(dòng)計(jì)算和嵌入式應(yīng)用的操作系統(tǒng),其突出優(yōu)點(diǎn)是模塊化、可定制性、完備性、實(shí)時(shí)性、通信能力強(qiáng)大和基于Win32應(yīng)用程序編程接口。 Windows CE.N ET 4.2是為嵌入式市場(chǎng)重新設(shè)計(jì)的Windows CE 3.0的后繼產(chǎn)品,為快速建立下一代智能移動(dòng)和小內(nèi)存占用的設(shè)備提供了一個(gè)健壯的實(shí)時(shí)操作系統(tǒng)。他包括創(chuàng)建一個(gè)基于定制設(shè)備的Wi ndows CE所需的一切。?

2Windows CE.NET 4.2下的串行通信技術(shù)

串行端口在Windows CE.NET 4.2(以下簡(jiǎn)稱(chēng)Windows CE)下屬于流接口設(shè)備,他是串行設(shè)備接口常規(guī)I/O驅(qū)動(dòng)程序的調(diào)用與通信相關(guān)的具體函數(shù)的結(jié)合。串行設(shè)備被視為用于打開(kāi)、關(guān)閉和讀寫(xiě)串行端口的常規(guī)的可安裝的流設(shè)備。Windows CE的串口函數(shù)和Windows的串口函數(shù)基本相同,但有幾點(diǎn)值得注意:

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

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

2.1打開(kāi)和關(guān)閉串行端口

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

關(guān)閉串行端口比較簡(jiǎn)單,調(diào)用CloseHandle函數(shù)就能關(guān)閉一個(gè)打開(kāi)的串行端口。CloseHandle只有一個(gè)參數(shù),即調(diào)用CreateFile函數(shù)打開(kāi)端口時(shí)返回的句柄,方法如下:

CloseHandle (hPort);

2.2讀寫(xiě)串行端口

正如使用CreateFile打開(kāi)串行端口一樣,可以使用ReadFile和WriteFile函數(shù)來(lái)讀寫(xiě)串行端 口。假設(shè)已經(jīng)調(diào)用CreateFile成功地打開(kāi)了串行端口,那么只需調(diào)用ReadFile即可從串行端口讀取數(shù)據(jù):

由于Windows CE不支持重疊的I/O操作,所以第5個(gè)參數(shù)必須設(shè)置為NULL。寫(xiě)串行端口也很 簡(jiǎn)單。調(diào)用過(guò)程如下:

如果從主線程讀、寫(xiě)大量的串行數(shù)據(jù),主線程就會(huì)因?yàn)榈却鄬?duì)較慢的串行讀或串行寫(xiě)操作而阻塞,不能即時(shí)處理其他的消息。因此最好用單獨(dú)的線程來(lái)讀寫(xiě)串行端口。

2.3配置串行端口

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

2.4設(shè)置超時(shí)值

對(duì)于串行端口來(lái)說(shuō),還必須配置超時(shí)值,否則程序可能陷入到一個(gè)等待來(lái)自串口字符的死循環(huán)。通常,配置超時(shí)值和配置串口類(lèi)似。首先用 GetCommTimeouts函數(shù)獲取當(dāng)前串口的超時(shí)值,然后修改CommTimeouts成員變量的值,最后用SetCommTimeouts設(shè)置新的超時(shí)值。

2.5異步多線程通信

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


先調(diào)用SetCommMask函數(shù)設(shè)定要等待的串口事件,例如串口有數(shù)據(jù)到來(lái)(EV_RXCHAR)事件;然后在讀串口線程中調(diào)用WaitCommEvent阻塞線程,等待EV_RXCHAR事件的發(fā)生。當(dāng)?shù)?/p>

待的EV_RXCHAR事件發(fā)生時(shí),調(diào)用ClearCommError函數(shù)清除通信錯(cuò)誤信息,并且獲取串口的當(dāng)前狀態(tài),主要是獲取串口接收緩沖區(qū)中的字節(jié)數(shù),然后調(diào)用ReadFile函數(shù)將接收緩沖區(qū)的數(shù)據(jù)全部讀出。最后調(diào)用PostMessage函數(shù)將這些數(shù)據(jù)發(fā)送給主線程進(jìn)行處理。

這里存在一個(gè)問(wèn)題:讀串口數(shù)據(jù)操作是在讀串口線程中進(jìn)行的,而處理數(shù)據(jù)操作是在主線程中進(jìn)行的,如果上次接收的數(shù)據(jù)還沒(méi)處理完,下次的數(shù)據(jù)又發(fā)送給了主線程處理,勢(shì)必造成混亂。這個(gè)問(wèn)題的解決,涉及到線程間的同步機(jī)制。

2.6線程間的同步

在Windows CE中采用同步對(duì)象的方法來(lái)協(xié)調(diào)多線程的執(zhí)行。一個(gè)線程監(jiān)視一個(gè)同步對(duì)象,當(dāng)用信號(hào)通知該對(duì)象時(shí),解除正在阻塞的線程并調(diào)度該線程。同步對(duì)象包括事件和互斥體兩種方式。本文只介紹事件方式。

事件對(duì)象是一種有兩種信號(hào)狀態(tài)有信號(hào)和無(wú)信號(hào)的同步對(duì)象,創(chuàng)建的事件對(duì)象可以被不同的線程共享。Windows CE常用等待函數(shù)阻塞線程自身的執(zhí)行,等待其監(jiān)視的對(duì)象產(chǎn)生一定的信號(hào)才停止阻塞,繼續(xù)線程的執(zhí)行。常用的等待函數(shù)有監(jiān)視單個(gè)同步對(duì)象的 WaitForSingleObject,和監(jiān)視多個(gè)同步對(duì)象的WaitForMultipleObjects。在Windows CE串口通信中,用CreateEvent函數(shù)創(chuàng)建事件時(shí),手動(dòng)設(shè)置為有信號(hào)狀態(tài),以便程序在第一次能夠順利地進(jìn)入到WaitCommEvent函數(shù)處等待串口數(shù)據(jù)的到來(lái),等到程序讀取了串口的數(shù)據(jù)并發(fā)送給主線程處理后,調(diào)用ResetEvent函數(shù)將事件狀態(tài)設(shè)置成無(wú)信號(hào)狀態(tài),線程就阻塞在 WaitForSingleObject函數(shù)處,一直等到主線程把接收到的數(shù)據(jù)處理完后,再將事件狀態(tài)用SetEvent函數(shù)設(shè)置成有信號(hào)狀態(tài),釋放 WaitForSingleObject函數(shù)對(duì)線程的阻塞,重新進(jìn)入WaitCommEvent函數(shù)處等待串口數(shù)據(jù)的到來(lái)。循環(huán)接收、處理串口數(shù)據(jù)的流程如圖1所示。

3完整的串行通信程序

頭文件定義:

4結(jié)語(yǔ)

為了實(shí)現(xiàn)WindowsCE下PC與單片機(jī)的串行通信,本串口通信程序采用自定義的通信協(xié)議,在運(yùn)行Windows 2000的PC機(jī)上,用Embedded Visual C++4.0編寫(xiě),在PC機(jī)上編譯、調(diào)試成功后,下載到運(yùn)行Windows CE.NET 4.2的工控機(jī)上運(yùn)行,實(shí)現(xiàn)了和單片機(jī)的正確通信,獲得了很好的效果。本程序也能夠應(yīng)用于其他類(lèi)似的測(cè)控應(yīng)用場(chǎng)合。?


參考文獻(xiàn)?
[1]傅曦,齊宇.嵌入式系統(tǒng)Windows CE開(kāi)發(fā)技巧與實(shí)例[M].北京:化學(xué)工業(yè)出版社,2003
[2]田東風(fēng).Windows CE應(yīng)用程序設(shè)計(jì)[M].北京:機(jī)械工業(yè)出版社,2003
[3][美]Douglas Boling.MICroSOFt Windows CE程序設(shè)計(jì)[M].北京博彥科技發(fā)展有限公司譯.北京:北京大學(xué)出版社,1999
[4][美]Chris Muench. Windows CE權(quán)威指南[M].精英科技譯.北京:中國(guó)電力出版社,2001.


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

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

關(guān)鍵字: 阿維塔 塞力斯 華為

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

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

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

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

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

關(guān)鍵字: 騰訊 編碼器 CPU

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

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

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

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

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

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

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

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

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

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉