MOXA的智能通信产品也大力支持WinCE.net了
2006-10-28 22:11
323 查看
经过近一个月的努力,嵌入式IOEServer终于开发完成,目前仅做了四个驱动,西门子 PPI,CP243; modbus Rtu/AscII,,TCP;效果比预想的要好,下面就是运行在WinCE上的一个截图。
下面简单介绍遇到的一些问题
1、关于EVC自编写的GetPrivateProfileString函数
在上一篇文章种我说了,这个函数还挺好使,不过它有很大的Bug,在实际测试种发现,ini文件不能有空行,一旦有空行,它就死掉(进入死循环)
要解决这个问题,目前是这样修改的:
2、关于BuildCommDCB函数
EVC下同样不支持该函数,我自己编写了一个,支持如下的格式:“COM1:9600,n,8,1”
3、关于sleep(0)
在VC编程中,看到有关sleep的有关介绍,但实际觉得并没有什么用处,但是在WinCE下确大显神奇,在线程中添加一个sleep(0),系统变得轻快多了。
4、关于WaitForMultipleObjects
不知为什么把WaitForMultipleObjects的第4个参数修改为TRUE,怎么都不好使,这句代码在PC上非常好使,不知道为什么在EVC始终有问题(FALSE没有问题),最后只好修改为WaitForSingleObject了。
5、共享内存的创建
在对话框窗体的OnInitDialog事件中,不能创建共享内存(我是指在这里动态调用的DLL,DLL初始化中有创建共享内存的代码),只好定义了一个一毫秒的时钟,解决了该问题(不知道为什么在另一款WinCE操作系统上又出了问题)
先写这些,还有写问题,以后在一一写来(以上问题只是我个人经验,如有不对之处希望高手指点)
下面简单介绍遇到的一些问题
1、关于EVC自编写的GetPrivateProfileString函数
在上一篇文章种我说了,这个函数还挺好使,不过它有很大的Bug,在实际测试种发现,ini文件不能有空行,一旦有空行,它就死掉(进入死循环)
要解决这个问题,目前是这样修改的:
... ... if (nPos == -1) { szTemp = szBuf; szBuf.Empty(); } else { szTemp = szBuf.Left(nPos); szBuf = szBuf.Right(szBuf.GetLength() - nPos); szBuf.TrimLeft(TEXT("\r\n")); ---------------------------------> 修改为szBuf.TrimLeft() } szTemp.TrimLeft(TEXT("\t ")); szTemp.TrimRight(TEXT("\t ")); if (szTemp.GetAt(0) == TEXT('[') && szTemp.GetAt(szTemp.GetLength() - 1) == TEXT(']')) { szTemp = szTemp.Right(szTemp.GetLength() - 1); szTemp = szTemp.Left(szTemp.GetLength() - 1); if (lpAppName == NULL) { return _tcslen( lpReturnedString ); } else if (szTemp.CompareNoCase(lpAppName) == 0) { while (1) { if (szBuf.IsEmpty()) {continue; } nPos = szBuf.FindOneOf(TEXT("\r\n")); if (nPos == -1) { szTemp = szBuf; szBuf.Empty(); } else { szTemp = szBuf.Left(nPos); szBuf = szBuf.Right(szBuf.GetLength() - nPos); szBuf.TrimLeft(TEXT("\r\n")); ---------------------------------> 修改为szBuf.TrimLeft() } ... ...
2、关于BuildCommDCB函数
EVC下同样不支持该函数,我自己编写了一个,支持如下的格式:“COM1:9600,n,8,1”
long BuildCommDCB(LPTSTR szMsg,DCB *dcb) { long BaudRate=9600,Parity=0,ByteSize=8,StopBits=0; TCHAR strConfig[255]; ULONG i,j=0,e=0,lngFlag=0; for(i=0;i<wcslen(szMsg);i++) { if(szMsg[i-1]==_T(':') || szMsg[i]==_T(',')) { lngFlag=1; } if(lngFlag==1) { strConfig[j++]=szMsg[i]; } if((j>0 && szMsg[i]==_T(',')) || i==wcslen(szMsg)-1) { strConfig[j-((i==wcslen(szMsg)-1) ? 0:1)]=_T('\0'); j=0; switch(e++) { case 0: swscanf(strConfig,_T("%ld"),&BaudRate); break; case 1: // 0-4=None,Odd,Even,Mark,Space switch (strConfig[0]) { case _T('n'): case _T('N'): Parity=0;break; case _T('o'): case _T('O'): Parity=1;break; case _T('e'): case _T('E'): Parity=2;break; case _T('m'): case _T('M'): Parity=3;break; case _T('s'): case _T('S'): Parity=4;break; } break; case 2: swscanf(strConfig,_T("%ld"),&ByteSize); case 3: // 0,1,2 = 1, 1.5, 2 if(wcscmp(strConfig,_T("1"))==0) { StopBits=0; } else if(wcscmp(strConfig,_T("1.5"))==0) { StopBits=1; } else if(wcscmp(strConfig,_T("2"))==0) { StopBits=2; } break; } } } if (e==4) { dcb->BaudRate=BaudRate; dcb->Parity=(BYTE)Parity; dcb->ByteSize=(BYTE)ByteSize; dcb->StopBits=(BYTE)StopBits; return 0; } else { return -1; } }
3、关于sleep(0)
在VC编程中,看到有关sleep的有关介绍,但实际觉得并没有什么用处,但是在WinCE下确大显神奇,在线程中添加一个sleep(0),系统变得轻快多了。
4、关于WaitForMultipleObjects
不知为什么把WaitForMultipleObjects的第4个参数修改为TRUE,怎么都不好使,这句代码在PC上非常好使,不知道为什么在EVC始终有问题(FALSE没有问题),最后只好修改为WaitForSingleObject了。
//if (WaitForMultipleObjects(G_IOMRun.YFThread.GetSize()-1,G_IOMRun.m_IsExitEvent,TRUE,1000)!=WAIT_OBJECT_0) for(i=0;i<G_IOMRun.YFThread.GetSize()-1;i++) { if(WaitForSingleObject(G_IOMRun.m_IsExitEvent[i],1000)!=WAIT_OBJECT_0) { lngWaitNum++; } }
5、共享内存的创建
在对话框窗体的OnInitDialog事件中,不能创建共享内存(我是指在这里动态调用的DLL,DLL初始化中有创建共享内存的代码),只好定义了一个一毫秒的时钟,解决了该问题(不知道为什么在另一款WinCE操作系统上又出了问题)
先写这些,还有写问题,以后在一一写来(以上问题只是我个人经验,如有不对之处希望高手指点)
相关文章推荐
- MOXA的智能通信产品也大力支持WinCE.net了
- MOXA的智能通信产品也大力支持WinCE.net了
- MOXA的智能通信产品也大力支持WinCE.net了
- 稳扎稳打Silverlight(53) - 4.0通信之对WCF NetTcpBinding的支持, 在Socket通信中通过HTTP检索策略文件, HTTP请求中的ClientHttp和Browse
- 在ASP.NET MVC中使用typeahead.js支持预先输入,即智能提示
- net2.0提供WinForm中TextBox智能提示,和补全的支持
- 稳扎稳打Silverlight(53) - 4.0通信之对WCF NetTcpBinding的支持, 在Socket通信中通过HTTP检索策略文件, HTTP请求中的ClientHttp和BrowserHttp
- 稳扎稳打Silverlight(53) - 4.0通信之对WCF NetTcpBinding的支持, 在Socket通信中通过HTTP检索策略文件, HTTP请求中的ClientHttp和BrowserHttp
- 稳扎稳打Silverlight(53) - 4.0通信之对WCF NetTcpBinding的支持, 在Socket通信中通过HTTP检索策略文件, HTTP请求中的ClientHttp和BrowserHttp
- 稳扎稳打Silverlight(53) - 4.0通信之对WCF NetTcpBinding的支持, 在Socket通信中通过HTTP检索策略文件, HTTP请求中的ClientHttp和BrowserHttp
- 稳扎稳打Silverlight(53) - 4.0通信之对WCF NetTcpBinding的支持, 在Socket通信中通过HTTP检索策略文件, HTTP请求中的ClientHttp和BrowserHttp
- 稳扎稳打Silverlight(53) - 4.0通信之对WCF NetTcpBinding的支持, 在Socket通信中通过HTTP检索策略文件, HTTP请求中的ClientHttp和BrowserHttp
- 稳扎稳打Silverlight(53) - 4.0通信之对WCF NetTcpBinding的支持, 在Socket通信中通过HTTP检索策略文件, HTTP请求中的ClientHttp和BrowserHttp
- 稳扎稳打Silverlight(53) - 4.0通信之对WCF NetTcpBinding的支持, 在Socket通信中通过HTTP检索策略文件, HTTP请求中的ClientHttp和BrowserHttp
- 稳扎稳打Silverlight(53) - 4.0通信之对WCF NetTcpBinding的支持, 在Socket通信中通过HTTP检索策略文件, HTTP请求中的ClientHttp和BrowserHttp
- 稳扎稳打Silverlight(53) - 4.0通信之对WCF NetTcpBinding的支持, 在Socket通信中通过HTTP检索策略文件, HTTP请求中的ClientHttp和BrowserHttp
- 稳扎稳打Silverlight(53) - 4.0通信之对WCF NetTcpBinding的支持, 在Socket通信中通过HTTP检索策略文件, HTTP请求中的ClientHttp和BrowserHttp
- 稳扎稳打Silverlight(53) - 4.0通信之对WCF NetTcpBinding的支持, 在Socket通信中通过HTTP检索策略文件, HTTP请求中的ClientHttp和BrowserHttp
- 稳扎稳打Silverlight(53) - 4.0通信之对WCF NetTcpBinding的支持, 在Socket通信中通过HTTP检索策略文件, HTTP请求中的ClientHttp和BrowserHttp
- PowerTalk控件 制作 即时通信 聊天室 产品咨询系统 支持与MSN的控件