日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(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)有過(guò)于復(fù)雜的編

在工業(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)用十分廣泛。隨著Windows CE嵌入式操作系統(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)稱Windows CE)下屬于流接口設(shè)備,他是串行設(shè)備接口常規(guī)I/O驅(qū)動(dòng)程序的調(diào)用與通信相關(guān)的具體函數(shù)的結(jié)合。串行設(shè)備被視為用于打開、關(guān)閉和讀寫串行端口的常規(guī)的可安裝的流設(shè)備。Windows CE的串口函數(shù)和Windows的串口函數(shù)基本相同,但有幾點(diǎn)值得注意:

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

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

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

在所有的流設(shè)備驅(qū)動(dòng)程序中,均使用CreateFile來(lái)打開串行端口設(shè)備,如果這個(gè)端口不存在,CreateFile返回 ERROR_FILE_NOT_FOUND。因此,用戶指定的端口必須是存在并且可用的,而且要遵循Windows CE流接口設(shè)備驅(qū)動(dòng)程序的命名規(guī)則,即COM后接要打開的端口號(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è)打開的串行端口。CloseHandle只有一個(gè)參數(shù),即調(diào)用CreateFile函數(shù)打開端口時(shí)返回的句柄,方法如下:

CloseHandle (hPort);

2.2讀寫串行端口

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

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

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

2.3配置串行端口

讀和寫串行端口比較簡(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)是配置串行端口常見的問(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í)值和配置串口類似。首先用 GetCommTimeouts函數(shù)獲取當(dāng)前串口的超時(shí)值,然后修改CommTimeouts成員變量的值,最后用SetCommTimeouts設(shè)置新的超時(shí)值。

2.5異步多線程通信

雖然Windows CE不支持重疊I/O,但還是可以使用多個(gè)線程來(lái)實(shí)現(xiàn)同樣的操作。當(dāng)主線程正忙時(shí),需要做的就是運(yùn)行單獨(dú)的線程來(lái)處理同步I/O操作。除了使用用于讀和寫的單獨(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)Windows CE下PC與單片機(jī)的串行通信,本串口通信程序采用自定義的通信協(xié)議,在運(yùn)行Windows 2000的PC機(jī)上,用Embedded Visual C++4.0編寫,在PC機(jī)上編譯、調(diào)試成功后,下載到運(yùn)行Windows CE.NET 4.2的工控機(jī)上運(yùn)行,實(shí)現(xiàn)了和單片機(jī)的正確通信,獲得了很好的效果。本程序也能夠應(yīng)用于其他類似的測(cè)控應(yīng)用場(chǎng)合。?

參考文獻(xiàn)?
[1]傅曦,齊宇.嵌入式系統(tǒng)Windows CE開發(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)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

特朗普集團(tuán)近日取消了其新推出的T1智能手機(jī)“將在美國(guó)制造”的宣傳標(biāo)語(yǔ),此舉源于外界對(duì)這款手機(jī)能否以當(dāng)前定價(jià)在美國(guó)本土生產(chǎn)的質(zhì)疑。

關(guān)鍵字: 特朗普 蘋果 AI

美國(guó)總統(tǒng)特朗普在公開場(chǎng)合表示,他已要求蘋果公司CEO蒂姆·庫(kù)克停止在印度建廠,矛頭直指該公司生產(chǎn)多元化的計(jì)劃。

關(guān)鍵字: 特朗普 蘋果 AI

4月10日消息,據(jù)媒體報(bào)道,美國(guó)總統(tǒng)特朗普宣布,美國(guó)對(duì)部分貿(mào)易伙伴暫停90天執(zhí)行新關(guān)稅政策,同時(shí)對(duì)中國(guó)的關(guān)稅提高到125%,該消息公布后蘋果股價(jià)飆升了15%。這次反彈使蘋果市值增加了4000多億美元,目前蘋果市值接近3萬(wàn)...

關(guān)鍵字: 特朗普 AI 人工智能 特斯拉

3月25日消息,據(jù)報(bào)道,當(dāng)?shù)貢r(shí)間3月20日,美國(guó)總統(tǒng)特朗普在社交媒體平臺(tái)“真實(shí)社交”上發(fā)文寫道:“那些被抓到破壞特斯拉的人,將有很大可能被判入獄長(zhǎng)達(dá)20年,這包括資助(破壞特斯拉汽車)者,我們正在尋找你?!?/p> 關(guān)鍵字: 特朗普 AI 人工智能 特斯拉

1月22日消息,剛剛,新任美國(guó)總統(tǒng)特朗普放出重磅消息,將全力支持美國(guó)AI發(fā)展。

關(guān)鍵字: 特朗普 AI 人工智能

特朗普先生有兩件事一定會(huì)載入史冊(cè),一個(gè)是筑墻,一個(gè)是挖坑。在美墨邊境筑墻的口號(hào)確保邊境安全,降低因非法移民引起的犯罪率過(guò)高問(wèn)題;在中美科技產(chǎn)業(yè)之間挖坑的口號(hào)也是安全,美國(guó)企業(yè)不得使用對(duì)美國(guó)國(guó)家安全構(gòu)成威脅的電信設(shè)備,總統(tǒng)...

關(guān)鍵字: 特朗普 孤立主義 科技產(chǎn)業(yè)

據(jù)路透社1月17日消息顯示,知情人士透露,特朗普已通知英特爾、鎧俠在內(nèi)的幾家華為供應(yīng)商,將要撤銷其對(duì)華為的出貨的部分許可證,同時(shí)將拒絕其他數(shù)十個(gè)向華為供貨的申請(qǐng)。據(jù)透露,共有4家公司的8份許可被撤銷。另外,相關(guān)公司收到撤...

關(guān)鍵字: 華為 芯片 特朗普

曾在2018年時(shí)被美國(guó)總統(tǒng)特朗普稱作“世界第八奇跡”的富士康集團(tuán)在美國(guó)威斯康星州投資建設(shè)的LCD顯示屏工廠項(xiàng)目,如今卻因?yàn)楦皇靠祵㈨?xiàng)目大幅縮水并拒絕簽訂新的合同而陷入了僵局。這也導(dǎo)致富士康無(wú)法從當(dāng)?shù)卣抢铽@得約40億美...

關(guān)鍵字: 特朗普 富士康

今年5月,因自己發(fā)布的推文被貼上“無(wú)確鑿依據(jù)”標(biāo)簽而與推特發(fā)生激烈爭(zhēng)執(zhí)后,美國(guó)總統(tǒng)特朗普簽署了一項(xiàng)行政令,下令要求重審《通信規(guī)范法》第230條。

關(guān)鍵字: 谷歌 facebook 特朗普

眾所周知,寄往白宮的所有郵件在到達(dá)白宮之前都會(huì)在他地進(jìn)行分類和篩選。9月19日,根據(jù)美國(guó)相關(guān)執(zhí)法官員的通報(bào),本周早些時(shí)候,執(zhí)法人員截獲了一個(gè)寄給特朗普總統(tǒng)的包裹,該包裹內(nèi)包含蓖麻毒蛋白。

關(guān)鍵字: 美國(guó) 白宮 特朗普
關(guān)閉