做过Modem、串口通讯的进来,一定要高手哦

gpmn gpmn 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我做的软件现在可以直接通过串口接受任何收到的数据,
但是,和Modem连接情况是,开头的connect xxxx,busy,no caarier....一类的Modem发过来的字符可以收到,但是随后的数据都收不到,根本就没有送到我的缓冲区,
ComStat.cbInQue==0!!!!!怎么回事,各位不妨直言,说不定可以旁敲侧击;
另外,超级终端可以完全正确的显示;
我的其他部分和VC自带的例子SERIAL一样;

DWORD PASCAL ReadCommBlock()//读数据的函数;
{
BOOL fReadStat ;
COMSTAT ComStat ;
DWORD dwErrorFlags;
DWORD dwLength=0;
DWORD dwError;
OVERLAPPED os ;

memset(InBuf,0,500);
if(!goon)return 0;//try to make sure that hComm is valide;

ClearCommError(hComm, &dwErrorFlags, &ComStat ) ;
if(ComStat.cbInQue<=0)return 0;

memset( &os, 0, sizeof( OVERLAPPED ) ) ;
os.hEvent=CreateEvent( NULL, // no security
TRUE, // explicit reset req
FALSE, // initial event reset
NULL ) ; // no name
if (os.hEvent == NULL)
return 0;


fReadStat = ReadFile(hComm ,InBuf,ComStat.cbInQue, &dwLength,&os);

if (!fReadStat)
{
if (GetLastError() == ERROR_IO_PENDING)
{
while(!GetOverlappedResult(hComm,&os, &dwLength, TRUE ))
{
dwError = GetLastError();
if(dwError == ERROR_IO_INCOMPLETE)
// normal result if not finished
continue;
else
{
// an error occurred, try to recover
ClearCommError(hComm, &dwErrorFlags, &ComStat ) ;
break;
}
}
}
else
{
// some other error occurred
dwLength = -1 ;
ClearCommError(hComm, &dwErrorFlags, &ComStat ) ;
}
}
CloseHandle(os.hEvent);
return dwLength;
}

UINT CommWatchProc(LPVOID pParam)//监视com事件的线程;
{
DWORD dwEvtMask ;
HWND hWnd=(HWND)pParam;
COMSTAT ComStat ;
DWORD dwErrorFlags;

while(goon)
{
ClearCommError(hComm, &dwErrorFlags, &ComStat ) ;//1
CString ss;//2
ss.Format("%d",dwErrorFlags);//3
if(dwErrorFlags!=0)AfxMessageBox(ss);//4加了这句话后可以收到Modem发过来的Connect xxx等字符;

dwEvtMask = 0 ;
SetCommMask(hComm, EV_RXCHAR );//本来是用EV_RXFLAG接受的,现在就是用EV_RXCHAR也什么都收不到
WaitCommEvent( hComm, &dwEvtMask, NULL );//停在这里;

// if((dwEvtMask & EV_RXFLAG)!=EV_RXFLAG)
// continue;

if(ReadCommBlock()>=0)//对方发送数据后,这里什么也读不到;
::SendMessage(hWnd,WM_HANDLEBUFFER,0,0);
else
::SendMessage(hWnd,WM_WATCHPROCERROR,0,0);
}
return true;
}
...全文

相关推荐

奇迹MU模拟器源码深度解析:从VC++网络编程到MMORPG架构设计

网络编程是构建分布式系统的核心技术,其核心原理在于通过Socket API实现进程间通信,采用自定义二进制协议进行高效数据序列化与反序列化。在游戏开发领域,尤其是MMORPG服务器架构中,网络编程的价值尤为突出,它直接决定了游戏的实时性、可扩展性与安全性。经典游戏如《奇迹MU》的服务端模拟器源码,为我们提供了一个完整的研究样本,展示了如何基于VC++和Winsock实现多进程协作的C/S架构。通过剖析其GameServer、DataServer、JoinServer等核心模块,可以深入理解状态机设计、数据包

weixin_30509393

从《原神》到《王者荣耀》:解密顶级手游都在用的网关架构设计

本文深入解析了《原神》与《王者荣耀》等顶级手游所采用的网关架构设计。网关不仅是流量入口,更是集连接管理、协议路由、安全防护于一体的战略核心。文章对比了MMORPG与MOBA游戏在网关设计上的差异,并阐述了构建高可用、可扩展的企业级游戏网关的核心组件与实战模式,为游戏后端开发提供关键架构洞见。

精神心理何日辉

Unity3D商业Moba手游源码深度解析:架构、同步与优化实战

网络游戏开发中,客户端-服务器架构是支撑实时交互的基石,其核心在于解决状态同步与数据一致性问题。通过状态同步、帧同步或预测回滚等机制,确保多玩家在虚拟世界中体验流畅、公平的对战。这一技术对于MOBA、FPS等强实时游戏类型具有极高价值,是实现低延迟、高并发游戏体验的关键。在Unity3D引擎中,开发者需要综合运用对象池、AssetBundle资源管理、DrawCall优化等手段进行性能调优,并结合服务器权威验证来设计反作弊系统,以构建稳定可靠的商业级游戏。本文以一份完整的商业MOBA手游源码为样本,深入剖析

weixin_30915951

从MXC300-30看移动SoC融合架构:单核调制解调器如何重塑3G手机设计

在嵌入式系统与移动通信领域,片上系统(SoC)架构设计是平衡性能、功耗与成本的核心。其基本原理是通过将多个处理单元(如CPU、DSP)、内存及外设控制器高度集成于单一芯片,实现数据高效互通与系统简化。这种深度集成带来的技术价值在于显著降低芯片间通信延迟与功耗,减少PCB面积与物料成本,从而为终端设备带来更优的能效比与更紧凑的设计。其典型应用场景包括对尺寸、续航和成本极为敏感的移动通信设备,例如功能手机与早期智能手机。本文以飞思卡尔MXC300-30平台为例,深入剖析其创新的“单核调制解调器”与 **Mobi

weixin_34242509

基于CGA规则与图像识别的游戏自动化工具设计与实现

自动化技术通过预设规则与条件判断,使计算机能够模拟人类操作,完成重复性任务,其核心价值在于提升效率与解放人力。在软件工程领域,这通常涉及状态机、规则引擎等设计模式。计算机视觉作为关键技术之一,通过图像识别与OCR等手段,使程序能够“感知”屏幕信息,是实现非侵入式自动化的基础。结合规则引擎对任务流程进行抽象描述,可以构建出灵活、可配置的自动化系统。这一技术组合在软件测试、RPA(机器人流程自动化)及辅助工具开发中有着广泛的应用场景。本文以游戏辅助工具MLAssist为例,具体阐述了如何借鉴城市建模领域的CGA

weixin_34009794
评论 5
收藏 已收藏
分享
返回顶部
gpmn
VC/MFC 16,550 成员 421,606 内容