工作中串口读写同步方式下的效率优化记录事件

来源:互联网 发布:天津软件行业协会 编辑:程序博客网 时间:2024/06/16 01:27

工作中的项目使用串口的数据提供样机是同步方式的,以前主要用了异步方式的编码;对同步方式的编码没有自己的研究,只是先让可以工作。

但是在实际工作中发现读取的效率有问题:于是自己研究了这部分代码发现找的别人的例子代码是有大问题的。

暂时记录一下:

bool CDJCom::ComRead(LPBYTE buf, int &len)
{
DWORD ReadSize = 0;
BOOL rtn = FALSE;
//设置读取1个字节数据,当缓存中有数据到达时则会立即返回,否则直到超时
if (m_hCom==INVALID_HANDLE_VALUE)
{
return false;
}
rtn = ReadFile(m_hCom, buf, 1, &ReadSize, NULL);
//如果是超时rtn=true但是ReadSize=0,如果有数据到达,会读取一个字节ReadSize=1
if (rtn == TRUE && 1 == ReadSize)
{
DWORD Error;
COMSTAT cs = {0};
int ReadLen = 0;
//查询剩余多少字节未读取,存储于cs.cbInQue中
ClearCommError(m_hCom, &Error, &cs);
ReadLen = (cs.cbInQue > len) ? cs.cbInQue:len;
if (ReadLen > 0)
{
//由于之前等待时以读取一个字节,所欲buf+1
rtn = ReadFile(m_hCom, buf+1, ReadLen, &ReadSize, NULL);
len = 0;
if (rtn)
{
len = ReadLen + 1;
}
}
}
PurgeComm(m_hCom, PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR|PURGE_TXABORT);
return rtn != FALSE;
}

实际上同步操作com口,读写交叉进行就可以了。这个上面的读取方法,先是试读一个字节,如果读取到就使用ClearCommError(m_hCom, &Error, &cs);ReadLen = (cs.cbInQue > len) ? cs.cbInQue:len;查询剩余多少字节未读取,得到这个未读取的剩余字节后,再按照这字节数进行读取;这之后测试读取成功后,还要和之前读取的数据挨着顺序存放读取。

明显这里面的操作就降低了速度。

在读取com数据的时候,一种是读取到获取的数据量方法返回,另一种是读取不到要读取的数量而超时返回;

所以,在需要对串口读取的时候,直接去读就可以了。

在优化代码之后,直接用读取特定数量(由于工作中的协议返回的是固定长度,我在代码中直接使用要读取的固定长度)立即返回,大大提高了读取速度。


这个读取com的效率问题:其实不应该存在的,同步的操作读写本来就很简单。而我因为两年后,再使用串口操作,就直接用了别人现成的同步读取,在使用过程中发现有这个效率问题,所以就有了这个记录。

同步读取的具体的效率还需要添加代码进行详细的统计,但是相比之前的操作:写了数据后,需要等待14-50毫秒的间隔再读操作(之前不等待就会出错,时间越短,出错概率越大),现在直接不需等待时间,就直接读操作还几乎没有出错的情况观察到,那真是很大的提高效率。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 无线设备坏了怎么办 电脑网页默认了怎么办 淘宝商家停止服务怎么办? 淘宝商家停止了怎么办 做淘宝不会美工怎么办 做客服打字慢怎么办 淘宝客服学不会怎么办 代购不给退货怎么办 淘宝不能发照片怎么办 兼职刷手被骗怎么办 淘宝店商品被降权怎么办 淘宝宝贝被降权了怎么办 淘宝违规降权怎么办 淘宝商品降权怎么办 公司不想要了怎么办 派派被客服禁言怎么办 淘宝收款不发货怎么办 新品标签没了怎么办 商家签收不退款怎么办 微信号存在风险怎么办 建网站不会管理怎么办 淘宝代销厂家发错货卖家怎么办 来分期退货退款怎么办 淘宝售后不退货怎么办 手机淘宝不退货怎么办 淘宝店不肯退款怎么办 退货快递丢件怎么办 淘宝客服不退款怎么办 淘宝被拉进黑名单怎么办 被买家举报假货怎么办 淘宝店售假3次怎么办 支付宝被骗200怎么办 淘宝被同行投诉怎么办 淘宝同行恶意投诉怎么办 淘宝被恶意举报怎么办 买到假的gucci包怎么办 淘宝买家退假货怎么办 淘宝产品被投诉怎么办 淘宝店铺被盗了怎么办 淘宝卖家不给解决问题怎么办 淘宝直通车亏钱怎么办