91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 26.7MB
    文件類型: .zip
    金幣: 2
    下載: 1 次
    發(fā)布日期: 2024-03-12
  • 語言: C/C++
  • 標(biāo)簽: c++??串口類??異步通信??

資源簡介

本程序中實現(xiàn)了c++串口異步通信,并對主要的函數(shù)功能及形參含義做了詳細的注釋,代碼實測正確!
關(guān)于程序的解釋可參見本人撰寫博客:
https://blog.csdn.net/sinat_35728816/article/details/81632310

資源截圖

代碼片段和文件信息

#include?“stdafx.h“
#include?
#include?“com.h“
#include?

My_Com::My_Com()?:
hCom(INVALID_HANDLE_VALUE)
m_IsOpen(false)
m_Thread(NULL)
{
//void?*memset(void?*s?int?ch?size_t?n);將s中當(dāng)前位置后面的n個字節(jié)用ch替換并返回s?
memset(&m_ovWait?0?sizeof(m_ovWait));
memset(&m_ovWrite?0?sizeof(m_ovWrite));
memset(&m_ovRead?0?sizeof(m_ovRead));
}

My_Com::~My_Com()
{
Close_Com();
}

bool?My_Com::Open_Com(LPCWSTR??Port)
{
hCom?=?CreateFile(
Port?//將要打開的串口邏輯名
GENERIC_READ?|?GENERIC_WRITE?//允許讀和寫
0?//指定共享屬性,由于串口不能共享,該參數(shù)必須置為0獨占方式
NULL//引用安全性屬性結(jié)構(gòu),缺省值為NULL
OPEN_EXISTING?//打開而不是創(chuàng)建
FILE_ATTRIBUTE_NORMAL?|?FILE_FLAG_OVERLAPPED?//重疊方式
NULL?//對串口而言該參數(shù)必須置為NULL
);
if?(hCom?==?INVALID_HANDLE_VALUE)
{
printf?(“打開串口失敗!\n“);
return?FALSE;
}
else
{
printf(“打開串口成功!\n“);
}
return?TRUE;
}

bool?My_Com::Config_Com()
{
SetupComm(hCom?1024?1024);?//輸入緩沖區(qū)和輸出緩沖區(qū)的大小都是1024

COMMTIMEOUTS?TimeOuts;?//設(shè)定讀超時
TimeOuts.ReadIntervalTimeout?=?MAXDWORD;
TimeOuts.ReadTotalTimeoutMultiplier?=?0;
TimeOuts.ReadTotalTimeoutConstant?=?0;?//設(shè)定寫超時
TimeOuts.WriteTotalTimeoutMultiplier?=?500;
TimeOuts.WriteTotalTimeoutConstant?=?2000;
SetCommTimeouts(hCom?&TimeOuts);?//設(shè)置超時

DCB?dcb;
GetCommState(hCom?&dcb);
dcb.BaudRate?=?9600;?//波特率為9600
dcb.ByteSize?=?8;?//每個字節(jié)有8位
dcb.Parity?=?NOPARITY;?//無奇偶校驗位
dcb.StopBits?=?TWOSTOPBITS;?//兩個停止位
SetCommState(hCom?&dcb);

PurgeComm(hCom?PURGE_TXCLEAR?|?PURGE_RXCLEAR);

m_ovRead.hEvent?=?CreateEvent(NULL?false?false?NULL);
m_ovWrite.hEvent?=?CreateEvent(NULL?false?false?NULL);
m_ovWait.hEvent?=?CreateEvent(NULL?false?false?NULL);

//SetCommMask設(shè)置要監(jiān)控的事件?
//EV_RXCHAR:輸入緩沖區(qū)中已收到數(shù)據(jù),即接收到一個字節(jié)并放入輸入緩沖區(qū)。
//EV_ERR:線路狀態(tài)錯誤,包括了CE_frame?/?CE_OVERRUN?/?CE_RXPARITY?3種錯誤。
SetCommMask(hCom?EV_ERR?|?EV_RXCHAR);

//_beginThreadex創(chuàng)建讀取線程??
m_Thread?=?(HANDLE)_beginthreadex(NULL?0?&My_Com::ComRecv?this?0?NULL);
m_IsOpen?=?true;

return?TRUE;
}

bool?My_Com::ComWrite(LPBYTE?buf?int?&len)
{
BOOL?rtn?=?FALSE;
DWORD?WriteSize?=?0;???//DWORD?代表?unsigned?long
PurgeComm(hCom?PURGE_TXCLEAR?|?PURGE_TXABORT);
m_ovWait.Offset?=?0;
rtn?=?WriteFile(hCom?buf?len?&WriteSize?&m_ovWrite);
if?(FALSE?==?rtn?&&?GetLastError()?==?ERROR_IO_PENDING)//后臺讀取
{
//等待數(shù)據(jù)寫入完成
printf(“已發(fā)送?:“);
for?(int?i?=?0;?i? printf(“%d?“?buf[i]);
printf(“\n“);
}
return?rtn?!=?FALSE;
}

unsigned?int?__stdcall?My_Com::ComRecv(void*?LPParam)
{
My_Com?*obj?=?static_cast(LPParam);
DWORD?WaitEvent?=?0?Bytes?=?0;
BOOL?Status?=?FALSE;
BYTE?ReadBuf[4096];
DWORD?Error;
COMSTAT?cs?=?{?0?};
int?i;
while?(obj->m_IsOpen)
{
WaitEvent?=?0;
obj->m_ovWait.Offset?=?0;
Status?=?WaitCommEvent(obj->hCom?&WaitEvent?&obj->m_ovWait);
/*
WaitCommEvent等待串口通信事件的發(fā)生
用途:用來判斷用SetCommMask()函數(shù)設(shè)置的串口通信事件是否已發(fā)生。
原型:BOOL?WaitCommEvent(HANDLE?hFileLPDWORD?lpEvtMaskLPOVERLAPPED?lpO

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-08-12?17:06??Mark_com\
?????目錄???????????0??2018-08-12?16:01??Mark_com\.vs\
?????目錄???????????0??2018-08-12?16:01??Mark_com\.vs\Ma_com\
?????目錄???????????0??2018-08-12?21:30??Mark_com\.vs\Ma_com\v15\
?????文件???????50176??2018-08-12?21:30??Mark_com\.vs\Ma_com\v15\.suo
?????文件????72404992??2018-08-12?21:30??Mark_com\.vs\Ma_com\v15\Browse.VC.db
?????目錄???????????0??2018-08-12?17:36??Mark_com\.vs\Ma_com\v15\ipch\
?????文件?????3670016??2018-08-12?21:23??Mark_com\.vs\Ma_com\v15\ipch\469c7ee59f05ae65.ipch
?????目錄???????????0??2018-08-12?21:25??Mark_com\Debug\
?????文件??????130560??2018-08-12?21:25??Mark_com\Debug\Ma_com.exe
?????文件??????905520??2018-08-12?21:25??Mark_com\Debug\Ma_com.ilk
?????文件?????1593344??2018-08-12?21:25??Mark_com\Debug\Ma_com.pdb
?????目錄???????????0??2018-08-12?21:22??Mark_com\Ma_com\
?????目錄???????????0??2018-08-12?21:25??Mark_com\Ma_com\Debug\
?????文件?????????924??2018-08-12?21:25??Mark_com\Ma_com\Debug\Ma_com.Build.CppClean.log
?????文件?????????242??2018-08-12?21:25??Mark_com\Ma_com\Debug\Ma_com.log
?????文件??????246588??2018-08-12?21:25??Mark_com\Ma_com\Debug\Ma_com.obj
?????文件?????3014656??2018-08-12?21:25??Mark_com\Ma_com\Debug\Ma_com.pch
?????目錄???????????0??2018-08-12?21:25??Mark_com\Ma_com\Debug\Ma_com.tlog\
?????文件????????2366??2018-08-12?21:25??Mark_com\Ma_com\Debug\Ma_com.tlog\CL.command.1.tlog
?????文件???????71272??2018-08-12?21:25??Mark_com\Ma_com\Debug\Ma_com.tlog\CL.read.1.tlog
?????文件????????1478??2018-08-12?21:25??Mark_com\Ma_com\Debug\Ma_com.tlog\CL.write.1.tlog
?????文件?????????206??2018-08-12?21:25??Mark_com\Ma_com\Debug\Ma_com.tlog\Ma_com.lastbuildstate
?????文件????????1238??2018-08-12?21:25??Mark_com\Ma_com\Debug\Ma_com.tlog\link.command.1.tlog
?????文件????????5252??2018-08-12?21:25??Mark_com\Ma_com\Debug\Ma_com.tlog\link.read.1.tlog
?????文件?????????576??2018-08-12?21:25??Mark_com\Ma_com\Debug\Ma_com.tlog\link.write.1.tlog
?????文件??????163983??2018-08-12?21:25??Mark_com\Ma_com\Debug\com.obj
?????文件????????5856??2018-08-12?21:25??Mark_com\Ma_com\Debug\stdafx.obj
?????文件??????674816??2018-08-12?21:25??Mark_com\Ma_com\Debug\vc141.idb
?????文件??????700416??2018-08-12?21:25??Mark_com\Ma_com\Debug\vc141.pdb
?????文件????????1456??2018-08-12?17:38??Mark_com\Ma_com\Ma_com.cpp
............此處省略9個文件信息

評論

共有 條評論