C語言中的串列埠讀寫功能實現

2021-08-06 03:36:11 字數 1762 閱讀 5763

在未接觸過串列埠前總覺得難以下手,但是實際嘗試後會發現其實並不難。本文使用**配置串列埠引數和讀寫操作,未新增已封裝號模組,這樣靈活性會更高。

首先是開啟串列埠進行各種配置:

hcom = createfile(portname, 

generic_read | generic_write,

0,null,

open_existing,

0,null);

if(hcom ==invalid_handle_value)

//設定輸入、輸出緩衝區,具體大小根據需求設定,單位為位元組

setupcomm(hcom, 200, 200);

portname是要開啟的串列埠名,例如要開啟串列埠1設為'com1'。

其餘引數預設即可,具體作用查資料。

接著是串列埠讀、寫超時的設定:

//設定串列埠操作超時,系統結構體,無需更改

commtimeouts timeouts;

memset(&timeouts, 0, sizeof(timeouts));

//設定讀超時

timeouts.readintervaltimeout = 50;

timeouts.readtotaltimeoutmultiplier = 0;

timeouts.readtotaltimeoutconstant = 100;

//設定寫超時

timeouts.writetotaltimeoutmultiplier = 0;

timeouts.writetotaltimeoutconstant = 100;

//設定超時

setcommtimeouts(hcom, &timeouts);

串列埠讀超時有兩種:間隔超時和總超時。兩者各自起作用,無論哪個超時成立都結束等待。

readintervaltimeout為間隔超時。即收到的兩個位元組間的間隔,一旦超過設定值則讀等待返回。

readtotaltimeoutmultiplier為總超時係數,readtotaltimeoutconstant為總超時偏差值。

總超時時間 = readintervaltimeout * 讀/寫位元組數(在讀取檔案時設定) + readtotaltimeoutconstant

超時等待不阻塞!超時等待不阻塞!超時等待不阻塞!

之前在使用時以為串列埠讀資料和tcp一樣,會在超時時間內阻塞,實際是無資料時readfile會立刻返回,只有接收到第乙個資料後超時才起作用。

接著是設定串列埠引數:

//串列埠引數

dcb dcb;

getcommstate(hcom, &dcb);

dcb.baudrate = 38400;

dcb.bytesize = 8;

dcb.parity = noparity;

dcb.stopbits = 0;

其中停止位設定需要注意,設定值為為0、1、2,但我們平常使用的串列埠軟體會顯示為1、1.5、2,不要把兩者弄混。

最後將設定好的內容與串列埠繫結就大功告成了。

//設定引數

setcommstate(hcom, &dcb);

purgecomm(hcom, purge_txabort | purge_rxabort | purge_rxclear | purge_txclear);

C語言中 和 的功能

參考 在c語言的巨集中,的功能是將其後面的巨集引數進行字串化操作 stringfication 簡單說就是在對它所引用的巨集 變數通過替換後在其左右各加上乙個雙引號。比如下面 中的巨集 define warn if exp do while 0 那麼實際使用中會出現下面所示的替換過程 warn if...

C語言檔案讀寫註冊登入功能實現

原來很簡單,首先要使用者選擇註冊還是登入,註冊時進行檔案寫入,登入時進行檔案讀寫操作,判斷使用者輸入的字元是否與檔案中的某乙個字元是否相等,如何有就完成登入,至於檔案如何進行讀寫操作我就不多說,可以參考其他文獻。話不多說,直接上 include include char name 80 pas 80...

讀寫串列埠的實現(一)

windows開啟串列埠,讀寫串列埠,自動識別串列埠 該串列埠讀寫是採用非同步方式,即非阻塞模式進行讀寫串列埠 串列埠名形如 com3 com4 com22 等 其中com1至com9能成功開啟,但是com10及以上開啟都是失敗的,需要特殊處理 及com10以上的開啟方式是 com10 com11 ...