4244|7

63

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

evc 串口通信程序问题 [复制链接]

我的程序只能发送数据,不能读数据!
读串口线程代码如下,请大虾帮忙找出原因!谢谢!
//串口读线程函数
DWORD CCESeries::ReadThreadFunc(LPVOID lparam)
{


CCESeries *ceSeries = (CCESeries*)lparam;
       
DWORD        evtMask;
BYTE * readBuf = NULL;//读取的字节
DWORD actualReadLen=0;//实际读取的字节数
DWORD willReadLen;
       
DWORD dwReadErrors;
COMSTAT        cmState;
       
// 清空缓冲,并检查串口是否打开。
ASSERT(ceSeries->m_hComm !=INVALID_HANDLE_VALUE);
       

//清空串口
PurgeComm(ceSeries->m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR );
               
SetCommMask (ceSeries->m_hComm, EV_RXCHAR | EV_CTS | EV_DSR );
while (TRUE)
{          

  if (WaitCommEvent(ceSeries->m_hComm,&evtMask,0))
  {               
        SetCommMask (ceSeries->m_hComm, EV_RXCHAR | EV_CTS | EV_DSR );
        //表示串口收到字符               
        if (evtMask & EV_RXCHAR)
        {                               
               ClearCommError(ceSeries->m_hComm,&dwReadErrors,&cmState);
                willReadLen = cmState.cbInQue ;
                if (willReadLen <= 0)
                {
                        continue;
                }
                               
                readBuf = new BYTE[willReadLen];
                  ReadFile(ceSeries->m_hComm,
                  readBuf,
                  willReadLen,
                  &actualReadLen,
                  NULL);
                               
                //如果读取的数据大于0,
                if (actualReadLen>0)
                {
                        //todo:

                }
        }
    }
    //如果收到读线程退出信号,则退出线程
    if (WaitForSingleObject(ceSeries->m_hReadCloseEvent,500) == WAIT_OBJECT_0)
    {
        break;
    }
}
        return 0;
}

最新回复

WaitForSingleObject函数用法是什么?? 和WaitCommEvent这个函数参数一样么?? 我在evc参考文档里没有找到这个WaitForSingleObject函数的用法啊,具体怎么和串口相关的状态相连接上的??  详情 回复 发表于 2007-4-14 00:33
点赞 关注

回复
举报

85

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
补充下:
    我调试过,每次都是在 if  (WaitCommEvent(ceSeries->m_hComm,&evtMask,0))  这条语句处处的问题,请大家帮忙说明下为什么这里没有相应事件,我是新手请多多指教!!
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
WaitCommEvent一直阻塞在那里,还是返回了,但是没有EV_RXCHAR事件?用示波器看看数据有没有发过来,或者在驱动里打印信息,看看数据收到没有?你都不关心EV_CTS | EV_DSR ,只要SetCommMask (ceSeries->m_hComm, EV_RXCHAR);就好了。
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

4
 
EVC串口编程只能进行同步方式通信,WaitCommEvent命令我编写程序时也遇到这种问题,这是我程序中的相关代码:
        //清除错误
        COMSTAT   ComStat;   
        DWORD     dwErrorFlags;
        ClearCommError( md->mHandle,&dwErrorFlags,&ComStat);
        //读数据
        ReadFile(md->mHandle, bytBuffer, lngSize,(DWORD *) &lngBytesRead, NULL);
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

5
 
WaitCommEvent一直阻塞在那里的,我先按照你们的方法试一试,不解再问!


先谢谢大虾们的指点!!
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

6
 
回:yefanqiu(叶帆)

大虾你说的是不用等待事件发生WaitCommEvent这个函数么??
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

7
 
我一般用WaitForSingleObject函数
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
WaitForSingleObject函数用法是什么??
和WaitCommEvent这个函数参数一样么??
我在evc参考文档里没有找到这个WaitForSingleObject函数的用法啊,具体怎么和串口相关的状态相连接上的??
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表