4352|8

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

很奇怪的问题 wince 串口测试应用程序 writefile(...)函数没有执行完就失败了,然后程序死掉了。 [复制链接]

串口测试的writefile(...)函数没有执行完就失败了,没有任何返回结果。writefile的下一个语句做断点,没有执行到。

if(hComm!=INVALID_HANDLE_VALUE&&dwCharToWrite!=0)
        {
                unsigned char* buf=new unsigned char[dwCharToWrite+1];
                for(int i=0;i<(int)dwCharToWrite;i++)
                {
                        buf=(unsigned char)m_strTransmit.GetAt(i);
                }
                buf[dwCharToWrite]='\0';
                //WriteFile(hComm,buf,1,&dwBytesWritten,NULL);

                fWriteState=WriteFile(hComm,buf,dwCharToWrite,&dwBytesWritten,NULL);//*sizeof(unsigned char)
                if(!fWriteState)
                {
                        AfxMessageBox(CString("can not write the data to port"));
                }
                delete[] buf;               
        }

其中的hComm不为空:hComm!=INVALID_HANDLE_VALUE条件为真
buf:断点跟踪也是正常的。
对比了help里的content,参数dwCharToWrite,&dwBytesWritten感觉也应该是正常的。
但是在虚拟机和开发板上执行writefile的时候,程序都死掉了,不知道是什么原因,请高人指点。
此帖出自WindowsCE论坛

最新回复

谁知道为什么啊,现在急死我了。  详情 回复 发表于 2010-3-9 19:56
点赞 关注
 

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
把串口的MDD代码移植到BSP下,打开debug调试信息,看看在哪里出了问题。
此帖出自WindowsCE论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这个对我来说难度有点大呀,虚拟机上的我不会改,开发板上用的是OEM提供的NK.bib也改不了,而且MDD那部分的代码改动对我来说难度有点大,大侠还有别的办法吗?
此帖出自WindowsCE论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

4
 
可不可以請你把 hComm = CreateFile(....) 及設定 dcb, timeout 等的 code 也一併放上來呢

看起來這段程式沒錯, 但可能是你設定 COM port 時設錯了.

Paul, Chao @ Techware
此帖出自WindowsCE论坛
 
 
 

回复

44

帖子

0

TA的资源

一粒金砂(初级)

5
 
BOOL CSerialPortDlg::OpenPort()
{
        if(hComm==INVALID_HANDLE_VALUE)
        {
                hComm=CreateFile(PortID,GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
                if(hComm==INVALID_HANDLE_VALUE )
                {
                        AfxMessageBox(CString("can not open the port! please check whether it has been used."));
                        return FALSE;
                }
                else
                {
                        GetCommState(hComm,&dcb);
                        dcb.BaudRate=BaudRates[BaudRate];
                        dcb.ByteSize=DataBits+6;
                        dcb.Parity=Parity;
                        dcb.StopBits=StopBits;
                        dcb.fParity=FALSE;
                        dcb.fBinary=TRUE;
                        dcb.fDtrControl=0;
                        dcb.fRtsControl=0;
                        dcb.fOutX=dcb.fInX=dcb.fTXContinueOnXoff=0;
                       
                        SetCommMask(hComm,EV_RXCHAR);

                        SetupComm(hComm,16384,16384);
                        if(!SetCommState(hComm,&dcb))
                        {
                                AfxMessageBox(CString("can not configure port with the current data!"));
                                PurgeComm(hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
                                CloseHandle(hComm);
                                hComm=INVALID_HANDLE_VALUE;
                                return FALSE;
                        }
                        else
                        {
                                GetCommTimeouts(hComm,&CommTimeOuts);
                               
                                CommTimeOuts.ReadIntervalTimeout=100;
                                CommTimeOuts.ReadTotalTimeoutMultiplier=1;
                                CommTimeOuts.ReadTotalTimeoutConstant=100;
                                CommTimeOuts.WriteTotalTimeoutMultiplier=0;
                                CommTimeOuts.WriteTotalTimeoutConstant=0;

                                if(!SetCommTimeouts(hComm,&CommTimeOuts))
                                {
                                        AfxMessageBox(CString("can not configure the timeout parameter!"));
                                        PurgeComm(hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
                                        CloseHandle(hComm);
                                        hComm=INVALID_HANDLE_VALUE;
                                        return FALSE;
                                }
                                else
                                {
                                        PurgeComm(hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);

                                        if(hReadThread=CreateThread(NULL,0,ReadPortThread,0,0,&dwThreadID))
                                        {
                                        }                                       
                                        else
                                        {
                                                AfxMessageBox(CString("can not create the thread."));
                                        }
                                        return TRUE;
                                }
                        }
                }
        }
        else
        {
                return FALSE;
        }
}
此帖出自WindowsCE论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

6
 
                        dcb.BaudRate=BaudRates[BaudRate];//9600
                        dcb.ByteSize=DataBits+6;//8 ''
                        dcb.Parity=Parity;//0 ''
                        dcb.StopBits=StopBits;//1 ''
                        dcb.fParity=FALSE;
                        dcb.fBinary=TRUE;
                        dcb.fDtrControl=0;
                        dcb.fRtsControl=0;
                        dcb.fOutX=dcb.fInX=dcb.fTXContinueOnXoff=0;

刚才断点跟了一下timeout也都设置了
此帖出自WindowsCE论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

7
 
                        dcb.BaudRate=BaudRates[BaudRate];//9600
                        dcb.ByteSize=DataBits+6;//8 ''
                        dcb.Parity=Parity;//0 ''
                        dcb.StopBits=StopBits;//1 ''
                        dcb.fParity=FALSE;
                        dcb.fBinary=TRUE;
                        dcb.fDtrControl=0;
                        dcb.fRtsControl=0;
                        dcb.fOutX=dcb.fInX=dcb.fTXContinueOnXoff=0;

刚才断点跟了一下timeout也都设置了
此帖出自WindowsCE论坛
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

8
 
writefile
我在wince5.0上,执行也总是失败,而且超时很慢。不是我设置的超时值。不知道为什么
此帖出自WindowsCE论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

9
 
谁知道为什么啊,现在急死我了。
此帖出自WindowsCE论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表