




已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章串口的讀寫和緩沖區(qū)數(shù)據(jù)的顯示33第5章串口的讀寫和緩沖區(qū)數(shù)據(jù)的顯示利用WIN32API讀寫串口時(shí),既可以同步執(zhí)行,也可以重疊(異步)執(zhí)行。在同步執(zhí)行時(shí),函數(shù)直接操作完成后才返回。這意味著同步執(zhí)行時(shí)線程會(huì)被阻塞,從而導(dǎo)致效率降低,在重疊執(zhí)行時(shí),即使操作未完成,調(diào)用的函數(shù)也會(huì)立即返回。費(fèi)時(shí)的I/O操作在后臺(tái)進(jìn)行這樣線程就可以做其他工作。例如線程可以在不同的句柄上執(zhí)行I/O操作,甚至可以在同一句柄上同時(shí)進(jìn)行讀寫操作?!爸丿B”一詞含義就在于此。5.1讀串口操作程序可以使用WIN32APIReadFile()函數(shù)從串口讀取數(shù)據(jù)。ReadFile()函數(shù)聲明如下:BOOLReadFile(HANDLEhFile,/指向標(biāo)識(shí)的句柄LPVOIDlpBuffer,/指向一個(gè)緩沖區(qū)DWORDnNumberOfBytesToRead,/讀取的字節(jié)數(shù)LPDWORDlpNumberOfBytesRead,/指向調(diào)用該函數(shù)讀出的字節(jié)數(shù)LPOVERLAPPEDlpOverlapped/一個(gè)OVERLAPPED的結(jié)構(gòu))其中主要參數(shù)介紹如下:hFile:指向標(biāo)識(shí)的句柄。對(duì)串口來說,就是由CreateFile()函數(shù)返回的句柄。該句柄需擁有GENERICREAD的權(quán)限。lpBuffer:指向一個(gè)緩沖區(qū)、該緩沖區(qū)主要用于存放從串口設(shè)備中讀取的數(shù)據(jù)。nNumberOfBytesToRead:指定要從串口設(shè)備讀取的字節(jié)數(shù)lpNumberOfBytesRead:指向調(diào)用該函數(shù)讀出的字節(jié)數(shù)。ReadFile()在讀操作前,首先將其設(shè)置為0。WindowsNT/2000中當(dāng)lpOverlapped沒有設(shè)置時(shí),lpNumberOfBytesRead必需設(shè)置。當(dāng)lpOverlapped設(shè)置時(shí),lpNumberOfBytesRead可以不設(shè)置。這是可以調(diào)用GetOverlappedResult()函數(shù)獲取實(shí)際的讀取數(shù)值。Windows9x中這個(gè)參數(shù)一定要設(shè)置.lpOverlapped:是一個(gè)0VERLAPPED的結(jié)構(gòu),如果hFile以燕山大學(xué)工學(xué)學(xué)士學(xué)位論文34FILE_FLAG_OVERLAPPED方式常見,則需要此結(jié)構(gòu);否則,不需要此結(jié)構(gòu)。5.2寫串口操作可以使用WIN32API函數(shù)WriteFile()向串口中寫數(shù)據(jù)。WriteFile()的數(shù)聲明如下:BOOLWriteFile(HANDLEhFile,/指向標(biāo)識(shí)的句柄LPVOIDlpBuffer,/指向一個(gè)緩沖區(qū)DWORDnNumberOfBytesToWrite,/指定要向串口設(shè)備寫入的z字節(jié)數(shù)LPDWORDlpNumbersOfBytesWritten,/指向調(diào)用該函數(shù)已寫入的字節(jié)數(shù)LPOVERLAPPEDllpOverlapped/一個(gè)OVERLAPPED的結(jié)構(gòu));其中主要參數(shù)介紹如下:hFile:指向標(biāo)識(shí)的句柄。對(duì)串口來說,就是由CreateFile()函數(shù)返回的句柄。該句柄需擁有GENERICWRITE的權(quán)限。pBuffer:指向一個(gè)緩沖區(qū),該緩沖區(qū)主要用來存放待寫入串口設(shè)備的數(shù)據(jù)。nNumberOfBytesToWrite:指定要向串口設(shè)備寫入的字節(jié)數(shù)。lpNumbersOfBytesWritten:指向調(diào)用該函數(shù)已寫入出的字節(jié)數(shù)。WriteFiIe()在寫操作前,首先將其設(shè)置為0。WindowsNT2000中當(dāng)lpOverlapped沒有設(shè)置時(shí),lpNumbersOfBytesWritten必需設(shè)置,當(dāng)lpOverlapped設(shè)置時(shí),lpNumbersOfBytesWritten可以不設(shè)置。這時(shí)可以調(diào)用GetOverlappedResult()函數(shù)獲取實(shí)際讀取數(shù)值。Windows9x中這個(gè)參數(shù)一定要設(shè)置。lpOverlapped:是一個(gè)OVERLAPPED的結(jié)構(gòu),如果hFile以FILE_FLAS_OVERLAPPED方式常見,則需要此結(jié)構(gòu);否則,不需要此結(jié)構(gòu)。第5章串口的讀寫和緩沖區(qū)數(shù)據(jù)的顯示355.3異步I/O操作異步(重疊)I/O操作是指應(yīng)用程序可以在后臺(tái)讀或者寫數(shù)據(jù)而在前臺(tái)做其他事情。例如,用程序可以在開始時(shí)對(duì)1000個(gè)數(shù)據(jù)進(jìn)行讀或?qū)懖僮?,然后返回?zhí)行其他的操作;在讀寫完成后,Windows就會(huì)產(chǎn)個(gè)一個(gè)信號(hào),應(yīng)用程序得到這個(gè)信號(hào),便可以進(jìn)行其他讀寫操作。要使用OVERLAPPED結(jié)構(gòu),CreateFile()函數(shù)的fdwAttrsAndFlags參數(shù)必須設(shè)置為FILE_FLAG_OVERLAPPED標(biāo)識(shí),讀寫串口函數(shù)必須指定OVERLAPPED結(jié)構(gòu)。異步I/O操作在Windows中使用廣泛。OVERLAPPED結(jié)構(gòu)類型聲明如下:typedefstruct_OVERLAPPEDDWORDInternal;DWORDInternalHigh;DWORDOffset;DWORDOffsetHigh;HANDLEhEvent;OVERLAPPED;其中主要參數(shù)如下:Internal:操作系統(tǒng)保留,指出一個(gè)和系統(tǒng)相關(guān)的狀態(tài)當(dāng)GetOverlappedResult()函數(shù)返回時(shí),如果將擴(kuò)展信息設(shè)置為ERROR_IO_PENDING,該參數(shù)有效。InternalHigh:操作系統(tǒng)保留,指出發(fā)送或接收的數(shù)據(jù)長(zhǎng)度。當(dāng)GetOverlappedResult()函數(shù)返回值不為0時(shí),該參牧有效。Offset和OffsetHigh:指明文件傳送的開始位置和字節(jié)偏移量的高位字。當(dāng)進(jìn)行端口操作時(shí),這兩個(gè)參數(shù)被忽略。hEvent:指定一個(gè)I/O操作完成后觸發(fā)的事件(信號(hào))。在調(diào)用讀寫函數(shù)進(jìn)行I/O操作之前,必需設(shè)置該參數(shù)。異步I/O操作可以由GetOverlappedResult()函數(shù)來獲取結(jié)果,也可以使用Windows信號(hào)函數(shù)來處理。GetOverlappedResult()函數(shù)可聲明為:BOOLGetOverlappedResult(HANDLEhFile,LPOVERLAPPPEDlpoverlapped,LPDW0RDlPNumberOfBytesTansferred,燕山大學(xué)工學(xué)學(xué)士學(xué)位論文36BOOLbWait);其中主要參數(shù)介紹如下:hFile:標(biāo)識(shí)通信句柄,它應(yīng)該和開始調(diào)用重疊結(jié)構(gòu)的ReadFile,WriteFile,WaitCommEvent函數(shù)的參數(shù)一致。lpoverlapped:在啟動(dòng)異步操作時(shí)指定的0VERLAPPED結(jié)構(gòu)。lPNumberOfBytesTansferred:指向一個(gè)長(zhǎng)整型變量,該變量接收有一個(gè)讀或?qū)懖僮鲗?shí)際傳遞的字節(jié)數(shù)。bWait:指定函數(shù)是否等待掛起的異步操作完成。如果該參數(shù)設(shè)為1,該函數(shù)知道I/O操作完成后才返回。如果該參數(shù)被設(shè)為0,同時(shí)處于披掛起狀態(tài),該函數(shù)返回為0,且GetLastError()函數(shù)返回ERROR_IO_INCOMPLETE。如果該函數(shù)調(diào)用成功,則返回值不為零,如果函數(shù)調(diào)用失敗,則返回值為零。Windows也使用等待函數(shù)來檢查事件對(duì)象的當(dāng)前狀態(tài)或等待Windows狀態(tài)信號(hào),在WaitForSingleObject()函數(shù)中指定的OVERLAPPED結(jié)構(gòu)中的hEvent即可獲取函數(shù)返回事件。WaitForSingleObject()函數(shù)的的聲明如下:DWORDWaitForSingleObject(HANDLEhHandle,DWORDdwMilliseconds);其中主要參數(shù)如下:hHandle:指定一個(gè)司步時(shí)間的勾柄,這里是指oVERLAPPEd結(jié)構(gòu)中的hEvenl句柄。dwMilliseconds:以ms為單位指定超時(shí)時(shí)間。該函數(shù)如果調(diào)用成功,則返回值標(biāo)識(shí)該函數(shù)導(dǎo)致該函數(shù)返回的事件,否則返回值WAIT_FAILE。成功的返回值可以是以下的三個(gè)值之一:WAIT_ABANDONED
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 新基建考試題及答案
- 廣告設(shè)計(jì)師證書考試信息設(shè)計(jì)解析題及答案
- 護(hù)士試題填空題及答案
- 宣傳誠(chéng)信面試題及答案
- 廣告設(shè)計(jì)師必考內(nèi)容解析試題及答案
- 廣告設(shè)計(jì)創(chuàng)意批評(píng)與改進(jìn)試題及答案
- 2024年助理廣告師考試注意細(xì)節(jié)試題及答案
- 初中安徽文綜試題及答案
- 2024年紡織考試的心理準(zhǔn)備技巧試題及答案
- 廣告設(shè)計(jì)師整合營(yíng)銷理論試題及答案
- 2024年安徽安慶安桐城鄉(xiāng)發(fā)展集團(tuán)有限公司招聘真題
- 上海市延安中學(xué)2024-2025學(xué)年高三下學(xué)期4月診斷考試數(shù)學(xué)試題含解析
- 拆除冷庫(kù)施工方案
- 2025年九江市第一批面向社會(huì)公開招聘留置看護(hù)隊(duì)員【68人】筆試備考題庫(kù)及答案解析
- 2025-2030中國(guó)可再生能源行業(yè)發(fā)展分析及投資前景與戰(zhàn)略規(guī)劃研究報(bào)告
- 10.1 美國(guó)課件2024-2025學(xué)年度七年級(jí)下學(xué)期人教版地理
- 鉚接粘接與錫焊教案
- 工業(yè)數(shù)字孿生測(cè)試要求
- 2025統(tǒng)編版語文六年級(jí)下冊(cè)第二單元解析+任務(wù)目標(biāo)+大單元教學(xué)設(shè)計(jì)
- 災(zāi)后救援與重建
- 上海第二工業(yè)大學(xué)《高等數(shù)學(xué)B(上)》2023-2024學(xué)年第二學(xué)期期末試卷
評(píng)論
0/150
提交評(píng)論