在win32下,可以使用兩種程式設計方式實現串列埠通訊,其一是使用activex控制項(activex是microsoft對於一系列策略性物件導向程式技術和工具的稱呼,其中主要的技術是元件物件模型(com)),這種方法程式簡單,但欠靈活。其二是呼叫windows的api函式,這種方法可以清楚地掌握串列埠通訊的機制,並且自由靈活。
本文我們只介紹api串列埠通訊部分。
串列埠的操作可以有兩種操作方式:同步操作方式和重疊操作方式(又稱為非同步操作方式)。同步操作時,api函式會阻塞直到操作完成以後才能返回(在多執行緒方式中,雖然不會阻塞主線程,但是仍然會阻塞監聽執行緒);而重疊操作方式,api函式會立即返回,操作在後台進行,避免執行緒的阻塞。
無論那種操作方式,一般都通過四個步驟來完成:
(1) 開啟串列埠
(2) 配置串列埠
(3) 讀寫串列埠
(4) 關閉串列埠
1、開啟串列埠
win32系統把檔案的概念進行了擴充套件。無論是檔案、通訊裝置、命名管道、郵件槽、磁碟、還是控制台,都是用api函式createfile來開啟或建立的。
2、配置串列埠
在開啟通訊裝置控制代碼後,常常需要對串列埠進行一些初始化配置工作。這需要通過乙個dcb結構來進行。dcb結構包含了諸如波特率、資料位數、奇偶校驗和停止位數等資訊。在查詢或配置串列埠的屬性時,都要用dcb結構來作為緩衝區。
一般用createfile開啟串列埠後,可以呼叫getcommstate函式來獲取串列埠的初始配置。要修改串列埠的配置,應該先修改dcb結構,然後再呼叫setcommstate函式設定串列埠。
除了在bcd中的設定外,程式一般還需要設定i/o緩衝區的大小和超時。windows用i/o緩衝區來暫存串列埠輸入和輸出的資料。如果通訊的速率較高,則應該設定較大的緩衝區。呼叫setupcomm函式可以設定序列口的輸入和輸出緩衝區的大小。
在用readfile和writefile讀寫序列口時,需要考慮超時問題。超時的作用是在指定的時間內沒有讀入或傳送指定數量的字元,readfile或writefile的操作仍然會結束。
要查詢當前的超時設定應呼叫getcommtimeouts函式,該函式會填充乙個commtimeouts結構。呼叫setcommtimeouts可以用某乙個commtimeouts結構的內容來設定超時。
讀寫串列埠的超時有兩種:間隔超時和總超時。間隔超時是指在接收時兩個字元之間的最大時延。總超時是指讀寫操作總共花費的最大時間。寫操作只支援總超時,而讀操作兩種超時均支援。用commtimeouts結構可以規定讀寫操作的超時。
在讀寫串列埠之前,還要用purgecomm函式清空緩衝區。
3、讀寫串列埠
我們使用readfile和writefile
VC基礎知識 筆記
1.showwindow方法 cgundongdlg pdlg new cgundongdlg pdlg create ids string102 pdlg showwindow sw restore 其中showwindow的引數為 sw forceminimize 是強制視窗最小化,主要使用在非...
紅外通訊基礎知識
q什麼是irda紅外通訊?紅外通訊,顧名思義,就是通過紅外線傳輸資料。在電腦技術發展早期,資料都是通過線纜傳輸的,線纜傳輸連線麻煩,需要特製介面,頗為不便。於是後來就有了紅外 藍芽 802.11等無線資料傳輸技術。在紅外通訊技術發展早期,存在好幾個紅外通訊標準,不同標準之間的紅外裝置不能進行紅外通訊...
通訊基礎知識(一)
1.常見2g無線通訊協議 gsm分頻多重進接 txt gprs edge和cdma1x分碼多重進接兩種,傳輸速度很慢 2.3g一般的資料通訊頻寬在500kb s以上,常見的有三種標準 jpg wcdma cdma2000 td scdma 3.目前4g標準 wimax,hspa lte 3.9g a...