`
mmdev
  • 浏览: 13329875 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

嵌入式IOEServer终于开发完成,相应的问题作一个系统阐述(WINCE)

 
阅读更多

经过近一个月的努力,嵌入式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(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操作系统上又出了问题)

先写这些,还有写问题,以后在一一写来(以上问题只是我个人经验,如有不对之处希望高手指点)

分享到:
评论

相关推荐

    基于ARM的WinCE嵌入式系统开发.rar

    《基于ARM的WinCE嵌入式系统开发》 在当今的科技领域,嵌入式系统已经深入到我们生活的方方面面,而Windows CE(简称WinCE)作为一款轻量级的操作系统,广泛应用于各种智能设备和工业控制系统中。尤其在ARM架构的...

    WinCE嵌入式开发入门C#

    WinCE是微软推出的一个实时操作系统,主要用于嵌入式设备,如工业控制设备、车载系统、医疗设备等。而C#是一种现代、面向对象的编程语言,它在.NET框架下运行,具有丰富的类库和强大的功能,常用于开发桌面应用、Web...

    基于Wince嵌入式开发概述

    基于Wince的嵌入式开发是一个复杂但充满机遇的领域,它要求开发者具备扎实的计算机基础知识,同时对硬件和操作系统有深入的理解。随着技术的不断进步,未来的嵌入式开发将更加注重智能化、连接性和用户体验,而...

    嵌入式系统应用开发(WinCE版)——课件

    WinCE的开发环境通常使用Platform Builder,这是一个可视化工具,允许开发者构建、配置和定制自己的操作系统映像。开发者可以根据需求选择预定义的板级支持包(BSP)或创建自定义BSP,以适应特定硬件平台。在Platform ...

    WinCE嵌入式系统教程

    《WinCE嵌入式系统教程》是一门深入探讨Windows CE嵌入式系统开发的专业课程,旨在教授学员如何高效地在WinCE平台上进行软件设计与开发。Windows CE是微软推出的一个实时操作系统,尤其适用于嵌入式设备,如工业控制...

    ARM嵌入式-WinCE开发教程

    《ARM嵌入式-WinCE开发教程》是一个深入学习ARM架构下Windows CE操作系统开发的宝贵资源。本教程针对想要在嵌入式领域中利用WinCE系统进行应用开发的工程师和爱好者,提供了详实且全面的知识讲解。WinCE,全称为...

    嵌入式wince开发

    本文旨在深入探讨WinCE在嵌入式开发中的应用,为初学者提供一个全面的学习指南。 #### WinCE概述 Windows CE,最初被称为Windows for Embedded Systems,是微软专为手持设备、工业控制、车载系统等小型设备设计的...

    WinCE嵌入式系统开发平台

    §4.1 WinCE开发周期 §4.2 开发平台 §4.3 开发环境构建 §4.4 模拟器概述 §4.5 Platform Builder开发 §4.5 EVC概述及开发

    《嵌入式WinCE系统开发》实验指导书.pdf

    嵌入式WinCE系统开发实验指导书

    精通ARM嵌入式Linux系统开发1

    书中通过大量的例程来讲解知识要点,并提供了大量极有参考价值的开发案例,读者可以通过这些例程和开发案例对嵌入式Linux开发有一个系统的学习和提高。 《精通ARM嵌入式Linux系统开发》共包括4个方面的内容:在...

    嵌入式Linux系统开发教程参考答案.doc

    本教程主要讲解了嵌入式Linux系统的开发课程,涵盖了嵌入式系统的定义、分类、特点、嵌入式操作系统、开发流程等多个方面。以下是从给定的文件中生成的知识点: 1. 嵌入式系统的定义:嵌入式系统是指将计算机直接...

    wince嵌入式系统原理

    Windows CE是一个模块化的、可裁剪的操作系统,它不同于传统的桌面版Windows,是为有限资源的设备设计的。CE支持多种处理器架构,包括ARM、x86和MIPS等,使其能适应不同类型的嵌入式设备,如掌上电脑、工业控制器、...

    嵌入式系统开发圣经

    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 驱动程序的编写 ...

    嵌入式系统开发

    该文档记录了湖北理工学院嵌入式系统开发流程,如何制作一个最小系统并移植的完整过程

    ARM嵌入式系统软件开发实例(一)

    ARM嵌入式系统软件开发是当今电子科技领域中的一个重要组成部分,尤其在物联网、移动设备、工业控制、汽车电子等应用场景中广泛使用。本实例旨在帮助开发者深入理解ARM架构下的软件开发流程,通过实践来掌握相关知识...

    WinCE 嵌入式软件开发入门

    Windows CE是一个由微软公司开发的嵌入式操作系统,主要用于各种设备,如掌上电脑、工业控制设备、车载信息娱乐系统等。本篇文章将深入探讨Windows CE嵌入式软件开发的基础知识,帮助初学者理解和掌握这一领域的核心...

    嵌入式Linux系统开发教程(第2版)

    本书的最后给出了一个综合实例,帮助读者理解嵌入式Linux 的开发方法和技巧。 目录 第1章 嵌入式系统基础 第2章 Linux基础 第3章 ARM体系架构 第4章 嵌入式编程 第5章 软硬件开发环境 第6章 交叉编译...

    嵌入式操作系统WinCE介绍.rar

    2. **实时性**:虽然WinCE不是一个硬实时操作系统,但通过适当的配置和优化,它可以提供良好的软实时性能,满足许多嵌入式应用的需求。 3. **兼容性**:WinCE支持.NET Micro Framework,与Windows桌面系统有良好的...

    WinCE 嵌入式开发系统 虚拟机 手持终端

    WinCE是一个实时操作系统(RTOS),它提供了丰富的API和SDK(软件开发工具包)供开发者使用。其核心组件包括内核、设备驱动、文件系统、网络协议栈等。开发者可以利用这些组件构建定制化的用户界面和应用程序,以...

Global site tag (gtag.js) - Google Analytics