CnComm是国人llbird所编写的一个串口通信开源库,详细介绍请查看:https://blog.csdn.net/wujian53/article/category/336981,最新的讨论博客请查看:http://www.cppblog.com/llbird/archive/2009/05/15/CnComm.html,最新的版本为1.51(事实上已多年没更新的说。。)。
(PS:月更博客又来了,差点忘记更新了)
今天来讨论一下CnComm在windows下的异步读取和同步读取用法,这些都只是我在工作上使用这个库时用法的总结,如有错误,请在评论区指出来,谢谢。
首先是异步读取的用法:
首先我们创建一个CnComm对象,例如
CnComm cncomm;
然后打开串口
if(!cncomm.open(1,115200))
{
//打开串口失败
}
上面代码的作用为以115200的波特率打开串口1。在这里我们先去看看CnComm的默认构造函数和Open函数
//默认构造函数
#ifdef CN_COMM_FOR_CE
//! WINCE:默认打开串口时启动监视线程 启用写独立线程 启用写缓冲
CnComm(DWORD dwOption = EN_THREAD )
#else
//! WIN32:默认打开串口时启动监视线程 异步重叠方式
CnComm(DWORD dwOption = EN_THREAD | EN_OVERLAPPED)
#endif
{
Init();
SetOption(dwOption);
}
//Open函数
/*! \param[in] dwPort 串口序号 1~1024 \param[in] dwBaudRate 波特率 \param[in] btParity 奇偶校验 \param[in] btByteSize 数据位数 \param[in] btStopBits 停止位数 */
//! 打开串口 缺省 9600, n, 8, 1 \sa bool Open(DWORD dwPort, LPCTSTR szSetStr)
bool Open(DWORD dwPort, DWORD dwBaudRate, BYTE btParity = NOPARITY, BYTE btByteSize = 8, BYTE btStopBits = ONESTOPBIT)
{
if (!CN_ASSERT(dwPort>=1 && dwPort<=1024))
return false;
BindPort(dwPort);
if (!CN_ASSERT(OpenPort()))
return false;
if (!CN_ASSERT(SetState(dwBaudRate, btParity, btByteSize, btStopBits)))
return Close(), false;
if (!CN_ASSERT(SetupPort()))
return Close(), false;
if ((dwOption_ & (EN_THREAD|EN_RX_THREAD|EN_TX_THREAD)) && !CN_ASSERT(BeginThread()))
return Close(), false;
return true;
}
可以看出,CnComm默认开启了监视线程,而监视线程运行的代码如下
#if defined(_MT) && !defined(CN_COMM_FOR_