• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >嵌入式开发 > wince串口编程编译的问题,刚接触这方面,请大神帮忙解答,特别着急,谢谢

wince串口编程编译的问题,刚接触这方面,请大神帮忙解答,特别着急,谢谢

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了wince串口编程编译的问题,刚接触这方面,请大神帮忙解答,特别着急,谢谢等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: wince串口编程编译的问题,刚接触这方面,请大神帮忙解答,特别着急,谢谢
描述:

我用的编译器是VS2008,wince串口程序编译之后通过串口调试助手,数据的接收和发送都是正常的,但是在最后关闭主窗口是会弹出错误消息。自己刚刚开始接触wince,之前写过的串口程序都没有成功,只有这个仿照别人的程序成功了,但是就是最后关闭的时候会出现问题,请各位帮忙给说一下,挺着急的,麻烦各位了。
 wince串口编程编译的问题,刚接触这方面,请大神帮忙解答,特别着急,谢谢
 wince串口编程编译的问题,刚接触这方面,请大神帮忙解答,特别着急,谢谢
源码如下

//接收串口数据线程
UINT ReadThread(LPVOID pParam) 
{ 
Ctest1Dlg *Pthis = (Ctest1Dlg*)pParam ; //转换参数为CUartDlg类型,以便于等下可以使用它的成员变量和函数等。
if(Pthis == NULL) //检查参数是否有效
return 0;
BYTE   byData;
DWORD   dwBytes;
BYTE    byReceiveBuf[1024];  ///缓冲区的大小     
int     nBytes= 0;
DWORD evtMask;
//设置字符监听信号
SetCommMask (Pthis->m_hcom, EV_RXCHAR | EV_CTS | EV_DSR );
//只要m_hcom有效,就一直循环
while (Pthis->m_hcom != NULL && Pthis->m_hcom != INVALID_HANDLE_VALUE) 
{
//等待收到串口信号
if (WaitCommEvent(Pthis->m_hcom, &evtMask, 0))
{
//设置字符监听信号
SetCommMask (Pthis->m_hcom, EV_RXCHAR | EV_CTS | EV_DSR );
//清空接收数组
memset(byReceiveBuf, 0, 1024);
nBytes = 0;
do 
{
//读字符
if(ReadFile(Pthis->m_hcom, &byData, 1, &dwBytes, 0))
{
if(dwBytes == 1)
{
byReceiveBuf[nBytes++] = byData;
if(nBytes == 1024)
{
break; //接收缓冲区已满
}
}
}                          
} while (dwBytes == 1);
byReceiveBuf[nBytes] = '\0';
if(nBytes == 0)  //没接到数据
{ 
continue; //继续循环
}
//开始对收到的字符串进行处理
CString str;
//读取接收文本框中原来的字符
((CEdit*)Pthis->GetDlgItem(IDC_EDIT_RECEIVE))->GetWindowTextW(str);
CString str_new;
//把新收到的字符转换称CString类型
str_new = byReceiveBuf;
//连接原来的字符和新的字符
str += str_new;
//设置接收文本框的字符
((CEdit*)Pthis->GetDlgItem(IDC_EDIT_RECEIVE))->SetWindowTextW(str);
}
}
return 0;
}
BOOL Ctest1Dlg::WritePort(const char *str)
{
DWORD dwNumBytesWritten;
DWORD dwHaveNumWritten =0 ; //已经写入多少
DWORD bufLen = strlen(str);
//判断串口是否有效
if(m_hcom == NULL || m_hcom == INVALID_HANDLE_VALUE)
{
return FALSE;
}
do
{
if (WriteFile (m_hcom, //串口句柄
str+dwHaveNumWritten, //被写数据缓冲区
bufLen - dwHaveNumWritten,          //被写数据缓冲区大小
&dwNumBytesWritten, //函数执行成功后,返回实际向串口写的个数
NULL)) //此处必须设置NULL
{
dwHaveNumWritten = dwHaveNumWritten + dwNumBytesWritten;
//写入完成
if (dwHaveNumWritten == bufLen)
{
break;
}
Sleep(10);
}
else
{
return FALSE;
}
}while (TRUE);
return TRUE;
}
void Ctest1Dlg::OnBnClickedButtonOpen()
{
// TODO: Add your control notification handler code here
//打开串口
m_hcom = CreateFile(_T("COM1:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
//检测是否打开串口成功
if(m_hcom != INVALID_HANDLE_VALUE && m_hcom != NULL)
{
DCB  dcb;    
dcb.DCBlength = sizeof(DCB); 
//配置串口参数
GetCommState(m_hcom, &dcb);
dcb.BaudRate = CBR_115200 ; //波特率
dcb.ByteSize = 8; //数据位
dcb.Parity = NOPARITY; //奇偶校验
dcb.StopBits = ONESTOPBIT;  //停止位
if (!SetCommState(m_hcom, &dcb))
{
//配置串口失败
MessageBox(_T("Set COM port fail!"));
return ;
}
//配置超时值
COMMTIMEOUTS  cto;
GetCommTimeouts(m_hcom, &cto);
cto.ReadIntervalTimeout = MAXDWORD;  
cto.ReadTotalTimeoutMultiplier = 0;  
cto.ReadTotalTimeoutConstant = 0;    
cto.WriteTotalTimeoutMultiplier = 10;  
cto.WriteTotalTimeoutConstant = 1000;    
if (!SetCommTimeouts(m_hcom, &cto))
{
//不能设置超时参数
MessageBox(_T("Set COM timeout fail!"));
return ;
}
}
else
{
MessageBox(_T("Open COM fail!"));
return ;
}
//串口打开有效,启动读串口线程
DWORD m_dwThreadID;
HANDLE m_hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ReadThread, this, 0, &m_dwThreadID);
CloseHandle(m_hThread);
}
void CUartDlg::OnBnClickedButtonClose()
{
// TODO: Add your control notification handler code here
if(m_hcom)
{
CloseHandle(m_hcom);
m_hcom = NULL;
}
}
void Ctest1Dlg::OnBnClickedButtonClear()
{
// TODO: Add your control notification handler code here
((CEdit*)GetDlgItem(IDC_EDIT_RECEIVE))->SetWindowTextW(_T(""));
}
void CUartDlg::OnBnClickedButtonSend()
{
// TODO: Add your control notification handler code here
CString str_send;
//获取文本框中的字符
((CEdit*)GetDlgItem(IDC_EDIT_SEND))->GetWindowTextW(str_send);
//判断字符串是否为空
if(str_send.IsEmpty())
{
return; //字符串为空,返回
}
char send[1024];
//把宽字符转换为字符型
wcstombs(send, str_send, 1024);
//发送信息
if(!WritePort(send))
{
MessageBox(_T("Write Port fail"));
}
}


解决方案1:

首先,看看程序退出时有没有做什么处理。
其次,这类程序可能与程序运行过程中出现的小范围内存操作越界有关。只是当时未表现出来,等到程序退出时才出现提示。这种现象之前遇到过,但不确定是不是 LZ 遇到的现象的原因。
最后,如果实在找不到原因,只能现注释

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • wince串口编程编译的问题,刚接触这方面,请大神帮忙解答,特别着急,谢谢

相关文章

  • 2017-06-05 为什么路由默认dns19216811会导致部分域名不解析,改成8888就可以了?
  • 2017-06-05 da14580系统的pcb
  • 2017-06-05 WINCE60设备唯一码的写入和读取NANDFLASH
  • 2017-06-05 ubuntu中etcresolvcnf中的127011是什么地址
  • 2017-06-05 AcrylicDNSProxy怎么配置!
  • 2017-06-05 求教MAX485芯片的这种接法对不对?
  • 2017-06-05 光驱挂载不上我用的HI3531
  • 2017-06-05 在书上看到的:新的数据采集器将在以下几个方面取得突破
  • 2017-06-05 本人有一MP3,驱动丢了,想自己写
  • 2017-06-05 海康网络摄像头SDK二次开发小白求助(车牌信息),最终要实现的功能是八采集到的车牌信息(车牌号、车型、颜色)打印至电脑linux终端,

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Rxtx支持485吗?
    • c#TekScope示波器编程求大虾们给个例子程序参考学习一下
    • 嵌入式系统开发的可靠性设计
    • 请问一下,有什么版本的linux里的fdisk可以正确的识别DOC盘的吗?
    • Wince70下GPRS拨号已经连接成功,IP地址也分配了,但是不能打开网页
    • 那位高手能提供一下usb20驱动的开发资料,最好有代码
    • 驱动程序自动安装的问题
    • 借人气打听!
    • 单片机ICL7135LCD1602
    • 如何在Windows驱动里使用API函数

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有