WindowsCE是微软公司
嵌入式、移动计算平台的基础,它是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的
电子设备操作系统,它是精简的Windows 95,Windows CE的图形用户界面相当出色。对于大部分制造业企业,测量仪器的自动数据采集一直是个令人烦恼的事情,即使仪器已经具有RS232/485等接口,但仍然在使用一边测量,一边手工记录到纸张,最后再输入到PC中处理的方式,不但工作繁重,同时也无法保证数据的准确性,常常管理人员得到的数据已经是滞后了一两天的数据;而对于现场的不良产品信息及相关的产量数据,如何实现高效率、简洁、实时的数据采集更是一大难题。
WinCE, 它是将条码扫描装置与数据终端一体化,带有电池可离线操作的终端电脑设备。具备实时采集、自动存储、即时显示、即时反馈、自动处理、自动传输等功能。为现场数据的真实性、有效性、实时性、可用性提供了保证。其具有一体性、机动性、体积小、重量轻、高性能,并适于手持等特点。它主要应用于工业数据采集中。好了,废话不多说,直接说说WinCE的应用程序开发与PC机应用程序开发的区别。
1
、开发思想
为了好理解,下面将开发产品的电脑叫主机,被开发的设备叫从机。 PC程序开发的主机(开发的设备)和从机(被开发的设备)是一体的,即是本身;WinCE开发的主机是PC,从机是WinCE,两者一般通过USB同步来通讯。要建立个概念。
这个是最重要的。有客户直接问,是不是要在WinCE上装一个VS2005或者labview软件,我并不觉得可笑。因为一些一直从事PC上应用开发的工程师,不像我这些搞单片机过来的,他们没有主机和从机的概念。建立这个概念,对从PC编程到WinCE开发,有很大的帮助。PC编程不需要知道SDK、主从机的概念,编译好程序就马上可以在本机出来。正因为如此,他们就分不清主从机,哪个是在PC上运行,那个应该是在WinCE上跑。
要清楚那些工具是用来开发设备程序的,那些工具是在设备上运行的。
例如,开发工具VS2005、SDK,这个对PC编程还是WinCE开发都是运行在主机上,用于设备开发的;编译出来的程序,以及运行这程序相关的DLL(例如开发SQL相关的程序,需要在设备上安装SQL、.net framework ,也就是一些DLL)都是属于设备的。对于.net framework 或者SQL,PC 和 WinCE上都有自己的版本,如PC上是SQL2000,WinCE是SQLCE3.5,这个是为应用程序的运行服务的,归属于从机的概念。开发WinCE的时候,主机会下载SQLCE、.Net到WinCE上使得开发的程序运行起开(当然可以在设备上直接安装这些或已经有了,就不用主机下载进去安装了)。开发PC程序的时候,由于主从是一体,会看不到这个过程,导致大部分人忽略了,转而对WinCE开发产生迷惑。
现在的VS2005自己本身也集成了这些服务运行于设备的程序(WinCE5.0、6.0的SQLCE .NetFramework,XP的.NetFramework),当然某些还是要安装的,例如XP的SQL2000,但其目的主要是服务用户开发的程序,属于设备的。
SDK
SDK 就是软件开发工具包,当然是属于主机上使用的东西。PC开发无论是VS2005,或者VC6.0,安装的时候已经包含了SDK包,因为PC的架构(X86)系统是单一的。而WinCE设备的种类很多,无法做到单一,需要厂家提供。国内生产WinCE工业平板电脑的厂商(比如深圳扬创科技有限公司www.yctek.com)会提供相关的SD等开发资料。主机是调用这些SDK生成平台相关的程序。然后下载到设备运行。开发示意如下图所示。
2 、开发工具 EVC4.0 SP4 & VC6.0 。早期的WinCE C++开发工具使用EVC4.0,十分类似于PC上早期常用的VC6.0。如果有VC6.0编程基础的,使用EVC新建一个工程,一步步实现功能。参考自带的帮助,这个也不会太难。当然,如果将VC6.0的程序直接移植到WinCE上,这个相对困难些。最好还是自己重新建一个程序。WinCE的API编程,或者MFC,功能没有Windows XP的大,有些函数、类也被裁减了。但这些在MSDN上都有说明。另外注意的是EVC 中字符串缺省的是UNICODE编码(即一个字符wchar_t是2个字节 typedefunsigned short wchar_t),而VC的是ASCII编码(一个字符char 1个字节)。
EVC现在微软不推荐使用了,而且只能够支持到WinCE5.0。我还是建议客户使用VS2005。
VS2005 。VS2005不再像EVC和VC一样,分开版本分别针对平台;而是把各种平台集成到一个IDE上,统一管理。对智能设备,除了他本省自带的SDK外,用户还可以安装其他的SDK,在创建程序的时候,选择相应的SDK即可。 转移到桌面Windows的开发,大家最熟悉不过的就是vc6.0。这款软件,堪称是经典,无论是执行速度,还是编译速度,在当年都是无望而不可及的高峰。即使是现在,很多人对此还津津乐道,特别是很多高校,教导C++采用的还是VC6.0,可见其影响力。只不过,技术是不停地发展的,微软注定不会让VC6.0舒服,后续才逐渐推出VS系列。你所能想到的开发方式,vs2005都可以帮你解决。更为有意思的是,在此之前,同一套代码,分别适用于WinCE和WinXP,那么你就必须为这两个系统建立不同的工程:一个是给EVC用的,另一个是给VC。但如果你使用VS2005之后,那么一切都不同了。虽然一开始会强制让你选择开发的平台,但实际上生成工程之后,你可以手动添加不同的SDK。换句话来说,你只要简单地在vs2005上选择不同的SDK,就可以编译不同平台的程序。相对以前,这无疑是一个巨大的进步。谈完开发工具,我们再来看看调试的方式。在WinXP里,调试的环境和开发的环境是共用的。这个比较好理解,不就是本机编译的程序会直接在本机上运行嘛。只不过有一些危险的操作,估计没几个人会调试,比如说软件上有全盘格式化功能,我想没几个人会在本机上调试吧?WinCE就安全点,反正直接在WinXP上点击WinCE程序会给你弹出一个错误的运行框。所以,要调试WinCE程序,你只有两种途径,一个是使用模拟器,另一个就是通过ActiveSync连接到开发板。而这两种方式,最好的自然是后者,毕竟模拟器,顾名思义,就是"模拟",很多实际上会发生的问题很可能会被屏蔽。只不过,如果是开发消费类电子,在还没有板子回来前,模拟器确实是唯一的选择。
具体到API函数代码方面,也确实有意思。WinXP有的函数,WinCE不一定具备;同样,WinCE随处可见的,也不一定在WinXP上有其身影;即使是两者都有的,其参数也不一定相同。
SystemTimeToTzSpecificLocalTime,然后在WinXP下也搜搜SetEventData,最后比较一下ReadFile最后一个形参试试?如果你不需要代码横跨两个平台,那么这些都不是问题;如果你需要互相移植,那么前面的两个问题也不是什么大问题,大不了自己重新写一个同名函数即可。最郁闷的是最后一个,两个系统都有相应的函数,只是形参不同。像ReadFile这样算是好的,最后一个形参WinCE明令指出必须设置为NULL,你将该代码原封不动移植到WinXP下,也能正常工作。但有的函数就没有那么好的运气了,比如说CreateProcess的倒数第二个形参psiStartInfo,在WinCE下必须设置NULL,但如果你还是不加更改照搬到WinXP,那么迎接你的将是程序的崩溃--因为在WinXP下,该形参不能为NULL!
不仅API函数需要留意,其实消息处理机制也必须注意。因为WinCE是一个精简的系统,实时性要求高,所以在WinCE下面消息处理机制有点点和WinXP不同。很可能在WinXP下跑得很正常的代码,在WinCE下会哑火;同样的道理,能在WinCE完美表现的代码,也许在WinXP下是一团糟。如果遇到这种情况,不妨从消息处理函数入手,说不定能有意外的惊喜。