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

正文內(nèi)容

api串口通信實(shí)例-文庫吧資料

2025-06-26 06:55本頁面
  

【正文】 timeouts。} return false。 {dcb)) = 0x13。 = 4。 = 2。 = 0。 = DTR_CONTROL_DISABLE。 = 0。 = 8。 = 0。 = NOPARITY。 // set DCB to configure the serial port}return FALSE。dcb))//獲取當(dāng)前DCB配置memset(amp。int rate= rate_arg。DCB dcb。}if (hComm == INVALID_HANDLE_VALUE)return FALSE。 FILE_FLAG_OVERLAPPED, 0, GENERIC_READ | GENERIC_WRITE,DWORDOVERLAPPED m_ov。include include include 比如說當(dāng)主窗體收到監(jiān)視線程發(fā)來的RX_CHAR(串口中有數(shù)據(jù))的消息后,就可以用ReadFile()函數(shù)去讀串口。注:在用api函數(shù)撰寫串口通信函數(shù)時(shí)大體上有兩種方法,一種是查尋法,另外一種是事件通知法。 lpOverlapped:異步結(jié)構(gòu),用來保存異步操作結(jié)果。 原型:BOOL WaitCommEvent(HANDLE hFile,LPDWORD lpEvtMask,LPOVERLAPPED lpOverlapped)。如果采用異步方式,則在調(diào)用ReadFile或WriteFile函數(shù)時(shí)必需指定一個(gè)Overlapped結(jié)構(gòu),調(diào)用后程序可繼續(xù)執(zhí)行其它操作,在合適的地方再調(diào)用函數(shù)GetOverlappedResult判斷異步重疊操作是否完成(判斷OVERLAPPED結(jié)構(gòu)中的hEvent是否被置位)。HANDLE hEvent。DWORD Offset。OVERLAPPED結(jié)構(gòu)定義如下:typedef struct _OVERLAPPED {DWORD Internal。注意GetOverlappedResult不能設(shè)置等待的時(shí)限,因此如果hEvent成員無信號(hào),則該函數(shù)將一直等待下去GetOverlappedResult函數(shù)調(diào)用方法如下:BOOL GetOverlappedResult(HANDLE hFile, //用CreateFile獲得的文件句柄LPOVERLAPPED lpOverlapped, //指向一個(gè)在啟動(dòng)重疊操作時(shí)指定的OVERLAPPED結(jié)構(gòu)(即//讀寫函數(shù)中指定的OverLapped結(jié)構(gòu))LPDWORD lpNumberOfBytesTransferred,//實(shí)際傳輸?shù)淖止?jié)數(shù)BOOL bWait, //是否等待懸掛的重疊操作完成,若為TRUE,則此函數(shù)直到操作完成后才//返回。因此,在超時(shí)發(fā)生后,WaitForSingleObject和GetOverlappedResult都會(huì)結(jié)束等待。GetOverlappedResult可以返回一個(gè)OVERLAPPED結(jié)構(gòu)來報(bào)告包括實(shí)際傳輸字節(jié)在內(nèi)的重疊操作結(jié)果。有兩種等待辦法:一種辦法是用象WaitForSingleObject這樣的等待函數(shù)來等待OVERLAPPED結(jié)構(gòu)的hEvent成員,可以規(guī)定等待的時(shí)間,在等待函數(shù)返回后,調(diào)用GetOverlappedResult。例如,在重疊操作時(shí)如果操作還未完成函數(shù)就返回,那么函數(shù)就返回FALSE,而且GetLastError函數(shù)返回ERROR_IO_PENDING。關(guān)閉串口的語句為CloseHandle()。如果不顯式關(guān)閉某端口,當(dāng)程序退出時(shí)打開的端口也將被自動(dòng)關(guān)閉。而WriteFile函數(shù)不但要把指定數(shù)量的字符拷入到輸出緩沖中,而且要等這些字符從串行口送出去后才算完成操作。通信端口的超時(shí)設(shè)置對(duì)讀寫的處理方式也會(huì)產(chǎn)生影響,如果調(diào)用讀寫函數(shù)時(shí)發(fā)生端口超時(shí),則讀寫函數(shù)立即返回并返回已傳輸?shù)臄?shù)據(jù)字節(jié)數(shù)。 在同步方式下,調(diào)用ReadFile或WriteFile后,當(dāng)實(shí)際讀寫操作完成或發(fā)生超時(shí)時(shí)才返回調(diào)用程序。參數(shù)說明: hFile:串口句柄 lpBuffer:存儲(chǔ)被讀出數(shù)據(jù)的首地址 nNumberOfBytesToRead:準(zhǔn)備讀出的字節(jié)個(gè)數(shù) NumberOfBytesRead:實(shí)際讀出的字節(jié)個(gè)數(shù) lpOverlapped:異步I/O結(jié)構(gòu)參數(shù)說明: hFile:串口句柄 lpBuffer:待寫入數(shù)據(jù)的首地址 nNumberOfBytesToWrite:待寫入數(shù)據(jù)的字節(jié)數(shù)長度 lpNumberOfBytesWritten:函數(shù)返回的實(shí)際寫入串口的數(shù)據(jù)個(gè)數(shù)的地址,利用此變量可判斷實(shí)際寫入的字節(jié)數(shù)和準(zhǔn)備寫入的字節(jié)數(shù)是否相同。串行口讀寫的同步、異步方式是在打開端口的同時(shí)給dwGlagsAndAttributes參數(shù)傳入適當(dāng)?shù)闹刀O(shè)定的。上式執(zhí)行完后,我們利用此 數(shù)值就可以用ReadFile()函數(shù)去讀串口中的數(shù)據(jù)了。dwError,amp。DWORD dwError=0。假如當(dāng)前串口中有5個(gè)字節(jié)數(shù)據(jù)的話,那么執(zhí)行完ClearCommError()函數(shù)后,此值在ReadFile函數(shù)中可被直接利用。//輸出緩沖區(qū)中的字節(jié)數(shù) }COMSTAT,*LPCOMSTAT。 lpStat:指向通信端口狀態(tài)的結(jié)構(gòu)變量,原型如下: typedef struct _COMSTAT{......DWORD cbInQue。 7CE_RXPARITY:硬件檢查到校驗(yàn)位錯(cuò)誤。 5CE_OVERRUN:溢出錯(cuò)誤,緩沖區(qū)容量不足,數(shù)據(jù)將丟失。 3CE_IOE:通信設(shè)備發(fā)生輸入/輸出錯(cuò)誤。意思是說檢測(cè)到某個(gè)字節(jié)數(shù)據(jù)缺少合法的停止位。ClearCommError()用途:清除串口錯(cuò)誤或者讀取串口現(xiàn)在的狀態(tài) 原型:BOOL ClearCommError(HANDLE hFile,LPDWORD lpErrors,LPCOMATAT lpStat)。在調(diào)用ReadFile和WriteFile之前,線程應(yīng)該調(diào)用ClearCommError函數(shù)清除錯(cuò)誤標(biāo)志。第四節(jié) 讀寫串口數(shù)據(jù)及關(guān)閉串口system(pause) 。SetCommMask(hComm, EV_RXCHAR)。if(setupdcb(9600))printf(setupDCB success\n)。open=openport(2)。void return true。timeouts))bool setuptimeout(DWORD ReadInterval,DWORD ReadTotalMultiplier,DWORD ReadTotalconstant,DWORD WriteTotalMultiplier,DWORD WriteTotalconstant){ return true。 else if(!SetCommState(hComm,amp。 // set DCB = 0x13。 = 4。 = 2。 = 0。 = DTR_CONTROL_DISABLE。 = 0。 = 8。 = 0。 = NOPARITY。 = sizeof(dcb)。return FALSE。if(!GetCommState(hComm,amp。dcb,0,sizeof(dcb))。bool setupdcb(int rate_arg)//設(shè)置DCB{}elsereturn true。 //通訊設(shè)備不能用模板打開if (hComm == INVALID_HANDLE_VALUE){CloseHandle(hComm)。 0, //同步I/O 0, //無安全屬性 GENERIC_READ | GENERIC_WRITE, //允許讀寫bool openport(char *portname)//打開串口{HANDLE hComm。 include 參數(shù)說明:HANDLE hFile,//串口名稱字符串dwFlags共有四種 flags:  PURGE_TXABORT:終止目前正在進(jìn)行的(背景)寫入動(dòng)作  PURGE_RXABORT:終正目前正在進(jìn)行的(背景)讀取動(dòng)作  PURGE_TXCLEAR: flush寫入的 buffer  PURGE_TXCLEAR: flush讀取的 buffer 調(diào)用PurgeComm函數(shù)可以終止正在進(jìn)行的讀寫操作,該函數(shù)還會(huì)清除輸入或輸出緩沖區(qū)中的內(nèi)容。 timeouts)。WriteTotalTimeoutMultiplier和WriteTotalTimeoutconstant的意義和作用分別與ReadTotalTimeoutMultiplier和ReadTotalTimeoutConstant相似,不再重復(fù)。每個(gè)操作的總限時(shí)時(shí)間等于ReadTotalTimeoutMultiplier成員乘以讀操作所需字節(jié)數(shù)再加上該值的和。每個(gè)讀操作的總限時(shí)時(shí)間等于讀操作所需的字節(jié)數(shù)與該值的乘積。若該成員為MAXDWORD,且ReadTotalTimeoutconstant和ReadTotalTimeoutMultiplier成員為零,則指出讀操作要立即返回已接收到的字符,即使未收到字符,讀操作也要返回。若任意兩個(gè)字符到達(dá)之間的間隔超過這個(gè)最大值,ReadFile操作完成,返回緩沖數(shù)據(jù)。ReadIntervalTimeout: 以毫秒為單位指定通信線上兩個(gè)字符到達(dá)之間的最大時(shí)間。DWORD WriteTotalTimeoutconstant。DWORD ReadTotalTimeoutconstant。COMMTIMEOUTS結(jié)構(gòu)定義如下:typedef struct _ COMMTIMEOUTS{DWORD ReadIntervalTimeout。設(shè)置超時(shí)設(shè)置需要一個(gè)結(jié)構(gòu)體COMMTIMEOUTS。 EV_TXEMPTY:輸出緩沖區(qū)中的數(shù)據(jù)已被完全送出。 EV_RXCHAR:輸入緩沖區(qū)中已收到數(shù)據(jù)。 EV_RING:檢測(cè)到振鈴信號(hào)。 原型:BOOL SetCommMask(HANDLE hFile,DWORD dwEvtMask)。然后調(diào)用SetCommMask,用來指定程序接收特定的串口事件,調(diào)用SetupComm函數(shù),設(shè)置串口緩沖區(qū)大小:參數(shù)說明: hFile:串口句柄 lpDCB:設(shè)備控制塊(Device Control Block)結(jié)構(gòu)地址。這樣可不必構(gòu)造一個(gè)完整的DCB結(jié)構(gòu)。 } DCB。 WORD wReserved1。 char EofChar。 char XoffChar。 //設(shè)置表示XON字符的字符,一般是采用0x11這個(gè)數(shù)值 char XonChar。 //停止位數(shù) BYTE StopBits。 //奇偶校驗(yàn) BYTE ByteSize。 //在發(fā)送XOFF字符之前outbuf中允許的最多字節(jié)數(shù) WORD XoffLim。 //設(shè)置在XON字符發(fā)送之前inbuf中允許的最少字節(jié)數(shù) DWORD fDummy2:17。 DWORD fAbortOnError:1。 DWORD fNull: 1。 //發(fā)送錯(cuò)誤協(xié)議 DWORD fErrorChar: 1。 //是否使用XON/XOFF協(xié)議 DWORD fOutX: 1。 DWORD fDsrSensitivity:1。 //DTR控制 DWORD fOutxDsrFlow:1。 //CTS線上的硬件握手 DWORD fParity: 1。 //是否是二進(jìn)制,一般設(shè)置為TRUE串口有很多的屬性,上面也已經(jīng)介紹了一些最重要的參數(shù)。由于參數(shù)非常多,當(dāng)需要設(shè)置串口參數(shù)時(shí),通常是先取得串口的參數(shù)結(jié)構(gòu),修改部分參數(shù)后再將參數(shù)結(jié)構(gòu)寫入。此結(jié)構(gòu)中含有和設(shè)備相關(guān)的參數(shù)。程序中用DCB進(jìn)行串口設(shè)置時(shí),應(yīng)先調(diào)用API函數(shù)GetCommState,來獲得串口的設(shè)置信息: GetCommState()用途:取得串口當(dāng)前狀態(tài) 原型:BOOL GetCommState(HANDLE hFile, LPDCB lpDCB)。在查詢或配置串口的屬性時(shí),都要用DCB結(jié)構(gòu)來作為緩沖區(qū)。這需要通過一個(gè)DCB結(jié)構(gòu)來進(jìn)行。第三節(jié) 設(shè)置串口system(pause) 。open=openport(2)。 void}return FALSE。 0)。 OPEN_EXISTING, //通訊設(shè)備已存在 0, //通訊設(shè)備必須以獨(dú)占方式打開hComm = Creat
點(diǎn)擊復(fù)制文檔內(nèi)容
物理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1