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

正文內(nèi)容

api串口通信實(shí)例-全文預(yù)覽

  

【正文】 ent成員無(wú)信號(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ù)直到操作完成后才//返回。GetOverlappedResult可以返回一個(gè)OVERLAPPED結(jié)構(gòu)來(lái)報(bào)告包括實(shí)際傳輸字節(jié)在內(nèi)的重疊操作結(jié)果。例如,在重疊操作時(shí)如果操作還未完成函數(shù)就返回,那么函數(shù)就返回FALSE,而且GetLastError函數(shù)返回ERROR_IO_PENDING。如果不顯式關(guān)閉某端口,當(dāng)程序退出時(shí)打開的端口也將被自動(dòng)關(guān)閉。通信端口的超時(shí)設(shè)置對(duì)讀寫的處理方式也會(huì)產(chǎn)生影響,如果調(diào)用讀寫函數(shù)時(shí)發(fā)生端口超時(shí),則讀寫函數(shù)立即返回并返回已傳輸?shù)臄?shù)據(jù)字節(jié)數(shù)。參數(shù)說(shuō)明: hFile:串口句柄 lpBuffer:存儲(chǔ)被讀出數(shù)據(jù)的首地址 nNumberOfBytesToRead:準(zhǔn)備讀出的字節(jié)個(gè)數(shù) NumberOfBytesRead:實(shí)際讀出的字節(jié)個(gè)數(shù) lpOverlapped:異步I/O結(jié)構(gòu)串行口讀寫的同步、異步方式是在打開端口的同時(shí)給dwGlagsAndAttributes參數(shù)傳入適當(dāng)?shù)闹刀O(shè)定的。dwError,amp。假如當(dāng)前串口中有5個(gè)字節(jié)數(shù)據(jù)的話,那么執(zhí)行完ClearCommError()函數(shù)后,此值在ReadFile函數(shù)中可被直接利用。 lpStat:指向通信端口狀態(tài)的結(jié)構(gòu)變量,原型如下: typedef struct _COMSTAT{......DWORD cbInQue。 5CE_OVERRUN:溢出錯(cuò)誤,緩沖區(qū)容量不足,數(shù)據(jù)將丟失。意思是說(shuō)檢測(cè)到某個(gè)字節(jié)數(shù)據(jù)缺少合法的停止位。在調(diào)用ReadFile和WriteFile之前,線程應(yīng)該調(diào)用ClearCommError函數(shù)清除錯(cuò)誤標(biāo)志。system(pause) 。if(setupdcb(9600))printf(setupDCB success\n)。voidbool setuptimeout(DWORD ReadInterval,DWORD ReadTotalMultiplier,DWORD ReadTotalconstant,DWORD WriteTotalMultiplier,DWORD WriteTotalconstant){ else // set DCB = 4。 = DTR_CONTROL_DISABLE。 = 8。 = NOPARITY。 = sizeof(dcb)。if(!GetCommState(hComm,amp。bool setupdcb(int rate_arg)//設(shè)置DCB{ //通訊設(shè)備不能用模板打開if (hComm == INVALID_HANDLE_VALUE){CloseHandle(hComm)。 0, //無(wú)安全屬性bool openport(char *portname)//打開串口{HANDLE hComm。 調(diào)用PurgeComm函數(shù)可以終止正在進(jìn)行的讀寫操作,該函數(shù)還會(huì)清除輸入或輸出緩沖區(qū)中的內(nèi)容。WriteTotalTimeoutMultiplier和WriteTotalTimeoutconstant的意義和作用分別與ReadTotalTimeoutMultiplier和ReadTotalTimeoutConstant相似,不再重復(fù)。每個(gè)讀操作的總限時(shí)時(shí)間等于讀操作所需的字節(jié)數(shù)與該值的乘積。若任意兩個(gè)字符到達(dá)之間的間隔超過這個(gè)最大值,ReadFile操作完成,返回緩沖數(shù)據(jù)。DWORD WriteTotalTimeoutconstant。COMMTIMEOUTS結(jié)構(gòu)定義如下:typedef struct _ COMMTIMEOUTS{DWORD ReadIntervalTimeout。 EV_TXEMPTY:輸出緩沖區(qū)中的數(shù)據(jù)已被完全送出。 EV_RING:檢測(cè)到振鈴信號(hào)。然后調(diào)用SetCommMask,用來(lái)指定程序接收特定的串口事件,調(diào)用SetupComm函數(shù),設(shè)置串口緩沖區(qū)大小:這樣可不必構(gòu)造一個(gè)完整的DCB結(jié)構(gòu)。 } DCB。 WORD wReserved1。 //設(shè)置表示XON字符的字符,一般是采用0x11這個(gè)數(shù)值 //停止位數(shù) //奇偶校驗(yàn) //在發(fā)送XOFF字符之前outbuf中允許的最多字節(jié)數(shù) //設(shè)置在XON字符發(fā)送之前inbuf中允許的最少字節(jié)數(shù) DWORD fDummy2:17。 DWORD fAbortOnError:1。 DWORD fNull: 1。 DWORD fErrorChar: 1。 DWORD fOutX: 1。 //DTR控制 DWORD fOutxDsrFlow:1。 //是否是二進(jìn)制,一般設(shè)置為TRUE由于參數(shù)非常多,當(dāng)需要設(shè)置串口參數(shù)時(shí),通常是先取得串口的參數(shù)結(jié)構(gòu),修改部分參數(shù)后再將參數(shù)結(jié)構(gòu)寫入。程序中用DCB進(jìn)行串口設(shè)置時(shí),應(yīng)先調(diào)用API函數(shù)GetCommState,來(lái)獲得串口的設(shè)置信息: GetCommState()用途:取得串口當(dāng)前狀態(tài) 原型:BOOL GetCommState(HANDLE hFile, LPDCB lpDCB)。這需要通過一個(gè)DCB結(jié)構(gòu)來(lái)進(jìn)行。system(pause) 。 voidreturn FALSE。 OPEN_EXISTING, //通訊設(shè)備已存在hComm = CreateFile(portname, //串口號(hào) ******************************************//* lishaoan 20090629 *****************************************************//* ******************************************************/include includesystem(pause) 。 voidreturn FALSE。 OPEN_EXISTING, //通訊設(shè)備已存在hComm = CreateFile(portname, //串口號(hào) ******************************************//* lishaoan 20090629 *****************************************************//* ******************************************************/include include異步,就是說(shuō),在進(jìn)行串口讀寫操作時(shí),不用等到I/O操作完成后函數(shù)才返回,也就是說(shuō),異步可以更快得響應(yīng)用戶操作;同步,相反,響應(yīng)的I/O操作必須完成后函數(shù)才返回,否則阻塞線程。 hTemplateFile指向一個(gè)模板文件的句柄,串口無(wú)模板可言,設(shè)為NULL。因?yàn)榇锌诓恢С秩魏喂蚕砟J?,所以dwShareMode必須設(shè)為0。當(dāng)用CreateFile打開串口時(shí),這個(gè)參數(shù)可用“COM1”指定串口1,用“COM2”指定串口2,依此類推。第二節(jié)下面依次講述各個(gè)步驟的過程。 對(duì)串口的參數(shù)進(jìn)行設(shè)置,其中比較重要的是波特率(BaudRate),數(shù)據(jù)寬度(BytesBits),奇偶校驗(yàn)(Parity),停止位(StopBits),當(dāng)然,重要的還有端口號(hào)(Port); API編寫串口,過程一般是這樣的: 清空串口緩沖區(qū),退出所有相關(guān)操作 ClearCommError 返回最后重疊(異步)操作結(jié)果 PurgeComm 設(shè)置通信超時(shí)參數(shù) SetCommMask 用字符串中的值來(lái)填充設(shè)備控制塊 GetCommTimeouts 檢測(cè)串口設(shè)置 SetCommState 作用 CreateFileAPI函數(shù)不僅提供了打開和讀寫通訊端口的操作方法,還提供了名目繁多的函數(shù)以支持對(duì)串行通訊的各種操作。 實(shí)現(xiàn)串口通訊的函數(shù)及串口編程簡(jiǎn)介 打開串口 GetCommState 更新串口狀態(tài)結(jié)構(gòu)體,并清除所有串口硬件錯(cuò)誤 CloseHandle 讀寫結(jié)束后,要關(guān)閉串口句柄,用CloseFile。 CreateFile函數(shù)原型如下:lpFileName:指向一個(gè)以NULL結(jié)束的字符串,該串指定了要?jiǎng)?chuàng)建、打開或截?cái)嗟奈募?、管道、通信源、磁盤設(shè)備或控制臺(tái)的名字。dwShareMode:指定此文件可以怎樣被共享。上面說(shuō)到了異步,那什么是異步呢?異步是相對(duì)同步這個(gè)概念而言的。 bool openport(char *portname)//打開串口{HANDLE hComm。 0, //無(wú)安全屬性 //通訊設(shè)備不能用模板打開if (hComm == INVALID_HANDLE_VALUE){CloseHandle(hComm)。if(open)printf(open port success)。 bool openport(char *portname)//打開串口{HANDLE hComm。 0, //無(wú)安全屬性 //通訊設(shè)備不能用模板打開if (hComm == INVALID_HANDLE_VALUE){CloseHandle(hComm)。if(open)printf(open port success)。在打開通信設(shè)備句柄后,常常需要對(duì)串行口進(jìn)行一些初始化工作。第一次打開串口時(shí),串口設(shè)置為系統(tǒng)默認(rèn)值,函數(shù)GetCommState和SetCommState可用于檢索和設(shè)定端口設(shè)置的DCB(設(shè)備控制塊)結(jié)構(gòu),該結(jié)構(gòu)中BaudRate、ByteSize、StopBits和Parity字段含有串口波特率、數(shù)據(jù)位數(shù)、停止位和奇偶校驗(yàn)控制等信息。此處是與串口相關(guān)的參數(shù)。這里介紹數(shù)據(jù)結(jié)構(gòu)DCB:typedef struct _DCB { // dcb //DCB結(jié)構(gòu)體大小 //波特率//是否進(jìn)行奇偶校驗(yàn) DWORD fDtrControl:2。 DWORD fInX: 1。 DWORD fRtsControl:2。 WORD wReserved。 //數(shù)據(jù)寬度,一般為8,有時(shí)候?yàn)? //設(shè)置表示XOFF字符的字符,一般是采用0x13這個(gè)數(shù)值 我們真正在串口編程中用到的數(shù)據(jù)成員沒有幾個(gè),在此僅介紹少數(shù)的幾個(gè)常用的參數(shù): DWORD BaudRate:串口波特率 DWORD fParity:為1的話激活奇偶校驗(yàn)檢查 DWORD Parity:校驗(yàn)方式,值0~4分別對(duì)應(yīng)無(wú)校驗(yàn)、奇校驗(yàn)、偶校驗(yàn)、校驗(yàn)置位、校驗(yàn)清零 DWORD ByteSize:一個(gè)字節(jié)的數(shù)據(jù)位個(gè)數(shù),范圍是5~8DWORD StopBits:停止位個(gè)數(shù),0~2分別對(duì)應(yīng)1位、2位停止位 然后再末尾調(diào)用SetCommState就可以了,還是比較方便的。要更改的串口參數(shù)包含在此結(jié)構(gòu)中。參數(shù)說(shuō)明: hFile:串口句柄 dwEvtMask:準(zhǔn)備監(jiān)視的串口事件掩碼 該參數(shù)有如下信息掩碼位值: EV_BREAK:收到BREAK信號(hào) EV_CTS:CTS(clear to send)線路發(fā)生變化 EV_DSR:DST(Data Set Ready)線路發(fā)生變化 EV_ERR:線路狀態(tài)錯(cuò)誤,包括了CE_FRAME\CE_OVERRUN\CE_RXPARITY 3鐘錯(cuò)誤。 EV_RXFLAG:使用SetCommState()函數(shù)設(shè)置的DCB結(jié)構(gòu)中的等待字符已被傳入輸入緩沖區(qū)中。SetCommTimeouts()BOOL SetCommTimeouts( hCommDev, lpctmo );Lpctmo指向包含新的超時(shí)參數(shù)的COMMTIMEOUTS結(jié)構(gòu)。DWORD WriteTotalTimeoutMultiplier。在ReadFile操作其間,收到第一個(gè)字符時(shí)開始計(jì)算時(shí)間。ReadTotalTimeoutMultiplier:以毫秒為單位指定一個(gè)乘數(shù),該乘數(shù)用來(lái)計(jì)算讀操作的總限時(shí)時(shí)間。ReadTotalTimeoutMultiplier和ReadTotalTimeoutConstant成員的值為0表示讀操作不使用限時(shí)時(shí)間。 =MAXD
點(diǎn)擊復(fù)制文檔內(nèi)容
物理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1