经过近一个月的努力,嵌入式IOEServer终于开发完成,目前仅做了四个驱动,西门子 PPI,CP243; modbus Rtu/AscII,,TCP;效果比预想的要好,下面就是运行在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></wcslen>{
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></g_iomrun.yfthread.getsize> {
if(WaitForSingleObject(G_IOMRun.m_IsExitEvent[i],1000)!=WAIT_OBJECT_0)
{
lngWaitNum++;
}
}
5、共享内存的创建
在对话框窗体的OnInitDialog事件中,不能创建共享内存(我是指在这里动态调用的DLL,DLL初始化中有创建共享内存的代码),只好定义了一个一毫秒的时钟,解决了该问题(不知道为什么在另一款WinCE操作系统上又出了问题)
先写这些,还有写问题,以后在一一写来(以上问题只是我个人经验,如有不对之处希望高手指点)
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
相关推荐
基于ARM的WinCE嵌入式系统开发,关于wince开发的好资料
Wince 嵌入式系统总分析,驱动开发流程,软件编写简介,学习嵌入式wince开发入门非常好的书!
第2篇介绍嵌入式Linux C语言开发中的重要技术,包括常用数据类型与修饰符、预处理器与重要函数、常用数据结构及嵌入汇编语言与移植性问题等应用性内容,结合项目实例展开讨论。第3篇则分别给出在嵌入式GUI应用开发、...
§4.1 WinCE开发周期 §4.2 开发平台 §4.3 开发环境构建 §4.4 模拟器概述 §4.5 Platform Builder开发 §4.5 EVC概述及开发
嵌入式WinCE系统开发实验指导书
ARM嵌入式系统开发:软件设计与优化ARM嵌入式系统开发:软件设计与优化ARM嵌入式系统开发:软件设计与优化ARM嵌入式系统开发:软件设计与优化ARM嵌入式系统开发:软件设计与优化ARM嵌入式系统开发:软件设计与优化...
ARM嵌入式-WinCE开发教程ARM嵌入式-WinCE开发教程ARM嵌入式-WinCE开发教程ARM嵌入式-WinCE开发教程
书中通过大量的例程来讲解知识要点,并提供了大量极有参考价值的开发案例,读者可以通过这些例程和开发案例对嵌入式Linux开发有一个系统的学习和提高。 《精通ARM嵌入式Linux系统开发》共包括4个方面的内容:在...
描述基于Wince嵌入式开发概述, 格式:pdf
ARM嵌入式Linux系统开发详解
3-3-5 选择一个嵌入式操作系统 3-4 嵌入式软件的开发流程 3-4-1 系统开发 3-4-2 编译 3-4-3 链接 3-4-4 重新定位 3-4-5 下载 3-5 沟通软件与硬件的桥梁 3-5-1 由说明书认识硬件组件 3-5-2 驱动程序的编写 ...
该文档记录了湖北理工学院嵌入式系统开发流程,如何制作一个最小系统并移植的完整过程
《嵌入式Linux应用开发完全手册》从最简单的点亮一个LED开始,由浅入深地讲解,使读者最终可以配置、移植、裁剪内核,编写驱动程序,移植GUI系统,掌握整个嵌入式Linux系统的开发方法。 《嵌入式Linux应用开发完全...
嵌入式系统软件开发实例 嵌入式系统软件开发实例 嵌入式系统软件开发实例
精通ARM嵌入式Linux系统开发《精通arm嵌入式linux系统开发(含cd...书中通过大量的例程来讲解知识要点,并提供了大量极有参考价值的开发案例,读者可以通过这些例程和开发案例对嵌入式linux开发有一个系统的学习和提高。
第一章 操作系统概述及WinCE 根据《Windows CE嵌入式系统》教材PPT改编
嵌入式操作系统WinCE介绍rar,嵌入式操作系统WinCE介绍
winCE_嵌入式_常规的应用开发步骤详细介绍
WindowsCE嵌入式系统课程。 教你如何用WINCE进行嵌入式系统的软件设计与开发。
WinCE嵌入式开发入门C# 内有详细讲解,还有实例哦