freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

api串口通信實(shí)例(編輯修改稿)

2024-07-17 06:55 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 不足,數(shù)據(jù)將丟失。 6CE_RXOVER:溢出錯(cuò)誤。 7CE_RXPARITY:硬件檢查到校驗(yàn)位錯(cuò)誤。 8CE_TXFULL:發(fā)送緩沖區(qū)已滿。 lpStat:指向通信端口狀態(tài)的結(jié)構(gòu)變量,原型如下: typedef struct _COMSTAT{......DWORD cbInQue。 //輸入緩沖區(qū)中的字節(jié)數(shù) DWORD cbOutQue。//輸出緩沖區(qū)中的字節(jié)數(shù) }COMSTAT,*LPCOMSTAT。該結(jié)構(gòu)中對(duì)我們很重要的只有上面兩個(gè)參數(shù),其他的我們可以不用管。假如當(dāng)前串口中有5個(gè)字節(jié)數(shù)據(jù)的話,那么執(zhí)行完ClearCommError()函數(shù)后,此值在ReadFile函數(shù)中可被直接利用。例如:COMSTAT ComStat。DWORD dwError=0。ClearCommError(hComm,amp。dwError,amp。ComStat)。上式執(zhí)行完后,我們利用此 數(shù)值就可以用ReadFile()函數(shù)去讀串口中的數(shù)據(jù)了。函數(shù)ReadFile和WriteFile的行為還受是否使用異步I/O(Overlapped)及通信超時(shí)設(shè)置的影響。串行口讀寫(xiě)的同步、異步方式是在打開(kāi)端口的同時(shí)給dwGlagsAndAttributes參數(shù)傳入適當(dāng)?shù)闹刀O(shè)定的。WriteFile()用途:向串口寫(xiě)數(shù)據(jù)原型:BOOL WriteFile(HANDLE hFile,LPCVOID lpBuffer,DWORD nNumberOfBytesToWrite,LPDWORD lpNumberOfBytesWritten,LPOVERLAPPED lpOverlapped)。參數(shù)說(shuō)明: hFile:串口句柄 lpBuffer:待寫(xiě)入數(shù)據(jù)的首地址 nNumberOfBytesToWrite:待寫(xiě)入數(shù)據(jù)的字節(jié)數(shù)長(zhǎng)度 lpNumberOfBytesWritten:函數(shù)返回的實(shí)際寫(xiě)入串口的數(shù)據(jù)個(gè)數(shù)的地址,利用此變量可判斷實(shí)際寫(xiě)入的字節(jié)數(shù)和準(zhǔn)備寫(xiě)入的字節(jié)數(shù)是否相同。 lpOverlapped:重疊I/O結(jié)構(gòu)的指針 ReadFile()用途:讀串口數(shù)據(jù) 原型:BOOL ReadFile(HANDLE hFile,LPVOID lpBuffer,DWORD nNumberOfBytesToRead,lpNumberOfBytesRead,lpOverlapped)。參數(shù)說(shuō)明: hFile:串口句柄 lpBuffer:存儲(chǔ)被讀出數(shù)據(jù)的首地址 nNumberOfBytesToRead:準(zhǔn)備讀出的字節(jié)個(gè)數(shù) NumberOfBytesRead:實(shí)際讀出的字節(jié)個(gè)數(shù) lpOverlapped:異步I/O結(jié)構(gòu) 在同步方式下,調(diào)用ReadFile或WriteFile后,當(dāng)實(shí)際讀寫(xiě)操作完成或發(fā)生超時(shí)時(shí)才返回調(diào)用程序。而異步方式函數(shù)在啟動(dòng)接收或發(fā)送過(guò)程后立即返回,程序繼續(xù)向下執(zhí)行,程序在調(diào)用ReadFile和WriteFile時(shí)必須提供一個(gè)Overlapped數(shù)據(jù)結(jié)構(gòu)指針,該結(jié)構(gòu)中包含一個(gè)手動(dòng)事件同步對(duì)象,其后的程序必須借助于該事件同步對(duì)象,完成數(shù)據(jù)的接收和發(fā)送過(guò)程。通信端口的超時(shí)設(shè)置對(duì)讀寫(xiě)的處理方式也會(huì)產(chǎn)生影響,如果調(diào)用讀寫(xiě)函數(shù)時(shí)發(fā)生端口超時(shí),則讀寫(xiě)函數(shù)立即返回并返回已傳輸?shù)臄?shù)據(jù)字節(jié)數(shù)。ReadFile函數(shù)只要在串行口輸入緩沖區(qū)中讀入指定數(shù)量的字符,就算完成操作。而WriteFile函數(shù)不但要把指定數(shù)量的字符拷入到輸出緩沖中,而且要等這些字符從串行口送出去后才算完成操作。如果不再使用某一端口,須將該端口關(guān)閉,以便其他程序可以使用該端口。如果不顯式關(guān)閉某端口,當(dāng)程序退出時(shí)打開(kāi)的端口也將被自動(dòng)關(guān)閉。但為了安全起見(jiàn),最好是顯式的關(guān)閉它。關(guān)閉串口的語(yǔ)句為CloseHandle()。CloseHandle()用途:關(guān)閉串口 原型:BOOL CloseHandle(HANDLE hObjedt)說(shuō)明: hObjedt:串口句柄 操作說(shuō)明:成功關(guān)閉串口時(shí)返回true,否則返回false當(dāng)ReadFile和WriteFile返回FALSE時(shí),不一定就是操作失敗,線程應(yīng)該調(diào)用GetLastError函數(shù)分析返回的結(jié)果。例如,在重疊操作時(shí)如果操作還未完成函數(shù)就返回,那么函數(shù)就返回FALSE,而且GetLastError函數(shù)返回ERROR_IO_PENDING。如果GetLastError函數(shù)返回ERROR_IO_PENDING,則說(shuō)明重疊操作還未完成,線程可以等待操作完成。有兩種等待辦法:一種辦法是用象WaitForSingleObject這樣的等待函數(shù)來(lái)等待OVERLAPPED結(jié)構(gòu)的hEvent成員,可以規(guī)定等待的時(shí)間,在等待函數(shù)返回后,調(diào)用GetOverlappedResult。另一種辦法是調(diào)用GetOverlappedResult函數(shù)等待,如果指定該函數(shù)的bWait參數(shù)為T(mén)RUE,那么該函數(shù)將等待OVERLAPPED結(jié)構(gòu)的hEvent事件。GetOverlappedResult可以返回一個(gè)OVERLAPPED結(jié)構(gòu)來(lái)報(bào)告包括實(shí)際傳輸字節(jié)在內(nèi)的重疊操作結(jié)果。如果規(guī)定了讀/寫(xiě)操作的超時(shí),那么當(dāng)超過(guò)規(guī)定時(shí)間后,hEvent成員會(huì)變成有信號(hào)的。因此,在超時(shí)發(fā)生后,WaitForSingleObject和GetOverlappedResult都會(huì)結(jié)束等待。WaitForSingleObject的dwMilliseconds參數(shù)會(huì)規(guī)定一個(gè)等待超時(shí),該函數(shù)實(shí)際等待的時(shí)間是兩個(gè)超時(shí)的最小值。注意GetOverlappedResult不能設(shè)置等待的時(shí)限,因此如果hEvent成員無(wú)信號(hào),則該函數(shù)將一直等待下去GetOverlappedResult函數(shù)調(diào)用方法如下:BOOL GetOverlappedResult(HANDLE hFile, //用CreateFile獲得的文件句柄LPOVERLAPPED lpOverlapped, //指向一個(gè)在啟動(dòng)重疊操作時(shí)指定的OVERLAPPED結(jié)構(gòu)(即//讀寫(xiě)函數(shù)中指定的OverLapped結(jié)構(gòu))LPDWORD lpNumberOfBytesTransferred,//實(shí)際傳輸?shù)淖止?jié)數(shù)BOOL bWait, //是否等待懸掛的重疊操作完成,若為T(mén)RUE,則此函數(shù)直到操作完成后才//返回。)。OVERLAPPED結(jié)構(gòu)定義如下:typedef struct _OVERLAPPED {DWORD Internal。DWORD InternalHigh。DWORD Offset。DWORD OffsetHigh。HANDLE hEvent。} OVERLAPPED。如果采用異步方式,則在調(diào)用ReadFile或WriteFile函數(shù)時(shí)必需指定一個(gè)Overlapped結(jié)構(gòu),調(diào)用后程序可繼續(xù)執(zhí)行其它操作,在合適的地方再調(diào)用函數(shù)GetOverlappedResult判斷異步重疊操作是否完成(判斷OVERLAPPED結(jié)構(gòu)中的hEvent是否被置位)。WaitCommEvent()用途:用來(lái)判斷用SetCommMask()函數(shù)設(shè)置的串口通信事件是否已發(fā)生。 原型:BOOL WaitCommEvent(HANDLE hFile,LPDWORD lpEvtMask,LPOVERLAPPED lpOverlapped)。參數(shù)說(shuō)明: hFile:串口句柄 lpEvtMask:函數(shù)執(zhí)行完后如果檢測(cè)到串口通信事件的話就將其寫(xiě)入該參數(shù)中。 lpOverlapped:異步結(jié)構(gòu),用來(lái)保存異步操作結(jié)果。當(dāng)由SetCommMask函數(shù)所指定的事件產(chǎn)生時(shí)這個(gè)函數(shù)將返回TRUE。注:在用api函數(shù)撰寫(xiě)串口通信函數(shù)時(shí)大體上有兩種方法,一種是查尋法,另外一種是事件通知法。這兩種方法的區(qū)別在于收串口數(shù)據(jù)時(shí),前一種方法是主動(dòng)的周期性的查詢串口中當(dāng)前有沒(méi)有數(shù)據(jù);后一種方法是事先設(shè)置好需要監(jiān)視的串口通信事件,然后依靠單獨(dú)開(kāi)設(shè)的輔助線程進(jìn)行監(jiān)視該事件是否已發(fā)生,如果沒(méi)有發(fā)生的話該線程就一直不停的等待直到該事件發(fā)生后,將該串口事件以消息的方式通知主窗體,然后主窗體收到該消息后依據(jù)不同的事件性質(zhì)進(jìn)行處理。比如說(shuō)當(dāng)主窗體收到監(jiān)視線程發(fā)來(lái)的RX_CHAR(串口中有數(shù)據(jù))的消息后,就可以用ReadFile()函數(shù)去讀串口。實(shí)例4:/****************** ******************************************//* lishaoan 20090710 *****************************************************//* ******************************************************/include include include HANDLE hComm。OVERLAPPED m_ov。COMSTAT stat。DWORD m_dwCommEvents。bool openport(char *portname)//打開(kāi)一個(gè)串口{hComm = CreateFile(portname, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0)。if (hComm == INVALID_HANDLE_VALUE)return FALSE。elsereturn true。}bool setupdcb(int rate_arg){DCB dcb。int rate= rate_arg。memset(amp。dcb,0,sizeof(dcb))。if(!GetCommState(hComm,amp。dcb))//獲取當(dāng)前DCB配置{return FALSE。}/* */// set DCB to configure the serial port = sizeof(dcb)。/* Serial Port Config */ = rate。 = NOPARITY。 = 0。 = ONESTOPBIT。 = 8。 = 0。 = 0。 = DTR_CONTROL_DISABLE。 = 0。 = RTS_CONTROL_DISABLE。 = 0。 = 0。 /* misc parameters */ = 0。 = 1。 = 0。 = 0。 = 0。 = 2。 = 4。 = 0x13。 = 0x19。 = 0。/* */ // set DCB if(!SetCommState(hComm,amp。dcb)) { return false。 } else return true。}bool setuptimeout(DWORD ReadInterval,DWORD ReadTotalMultiplier,DWORD ReadTotalconstant,DWORD WriteTotalMultiplier,DWORD WriteTotalconstant){ COMMTIMEOUTS timeouts。 =ReadInterval。 =ReadTotalconstant。 =ReadTotalMultiplier。 =WriteTotalconstant。 =WriteTotalMultiplier。 if(!SetCommTimeouts(hComm, amp。timeouts)) { return false。 } else return true。}ReceiveChar( ){BOOL bRead = TRUE。BOOL bResult = TRUE。DWORD dwError = 0。DWORD BytesRead = 0。char RXBuff。for (。){ bResult = ClearCommError(hComm, amp。dwError, amp。stat)。160
點(diǎn)擊復(fù)制文檔內(nèi)容
物理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1