<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > Windows CE.NET 4.2下PC與單片機的串行通信

Windows CE.NET 4.2下PC與單片機的串行通信

作者: 時(shí)間:2012-03-07 來(lái)源:網(wǎng)絡(luò ) 收藏

2.5異步多線(xiàn)程

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

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

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

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

2.6線(xiàn)程間的同步

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

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

40.jpg

通信相關(guān)文章:通信原理




關(guān)鍵詞: 串行 通信 單片機 PC CE.NET 4.2 Windows

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>