作者:ARM-WinCE
Mass Storage的实际应用就是U盘,目标板和PC通过USB相连,PC可以把目标板识别为U盘,在很多产品上都很常用。这里介绍一下在WinCE系统中U盘功能的实现。
在谈WinCE的USB Mass Storage实现之前,首先要具备以下条件:
1. 开发板支持USBClient设备。
2. 开发板上至少有一种存储设备可以被用来映射为U盘。
现在的处理器一般都带有USB Client或者是USB OTG控制器,并且BSP中都有相应的驱动。对于存储设备来说,Nandflash或者SD卡都可以作为存储设备。所以都不是什么问题。下面介绍一下步骤:
1. 选择WinCE Mass Storage组件
在定制WinCE的时候,在Catalog Items View中选择”Device Drivers”->”USB Function”->”USB Function Clients”->”Mass Storage”。
2. 更改USB Client驱动的注册表配置
在WinCE中,USB Client驱动的注册表配置如下:
[HKEY_LOCAL_MACHINE\Drivers\USB\FunctionDrivers]
“DefaultClientDriver”:设置默认的USB Client驱动,这里应该是Mass_Storage_Class
[HKEY_LOCAL_MACHINE\Dri...

>> 阅读全文

作者:ARM-WinCE
USB的广泛应用就不用多说了,相信目前的各个领域的嵌入式产品中,很少有不用USB的。USB是主从结构的,分为USB Host和USB Slave,从USB1.0,USB1.1到现在的USB2.0,基于USB2.0还有USB OTG,也就是同时支持Host和Slave设备。目前最新的好像是USB3.0,刚开始普及吧。
在WinCE6.0中,对USB是有很好的支持。一般来说,如果USB的设备驱动做好了,USB的协议层以及上层的应用都是现成的,而且还有源码。也就是说,我们只需要在BSP中完成USB的驱动就可以了。先来看一下WinCE中USB的架构,如图:
USB Host:
最底层就是USB Host控制器了,上层是USB Host Controller Driver,该驱动负责和硬件通讯来传输数据,在WinCE中支持UHCI,OHCI和EHCI。Host Core Driver & Hub Driver是独立于硬件的USB协议栈,支持USB Host协议及USB Hub功能。最上层就是USB Host Class driver是USB Host的应用协议,目前在WinCE中,支持RNDIS,Print,Mass Storage和HID四种应用。
USB Device:
最底层是USB Device控制器,上层是USB Device Driver负责和硬件通讯。Device Core Driver是USB Device的协议栈。最上层...

>> 阅读全文

作者:ARM-WinCE
MUI是指多语言的支持,可以在WinCE系统中支持多种语言,并根据需要进行切换。下面介绍一下具体的实现:
1. 添加多种语言:
创建一个WinCE工程,然后在”Solution Explorer”中右击工程,选择”Properties”,会弹出一个对话框。在左侧的列表中选择”Local”,在右侧选择所要支持的语言,这里我选择了French,Japanese,Chinese(PRC)和English四种语言。在”Default Locale:”中选择系统的默认语言,这里选择的是英语。如图:
2. 添加MUI组件
在”Catalog Item View”中选择支持MUI的组件,选择”Core OS”->”CEBASE”->”International”->”Multilingual User Interface(MUI)”,如图:
在上面选择了French,Japanese,English和Chinese四种语言,如果要想WinCE能够正确显示,还要选择相应的字体。在这里只需为Chinese和Japanese添加字体。选择”Core OS”->”CEBASE”->”International”->”Locale Specify Support”->”Chinese(Simplified)”->”Fonts”->”SimSun & NSimSun”->”SimSun & NSimSun”来添加中文字体,同样的方法在”Loca...

>> 阅读全文

作者:ARM-WinCE
WinCE支持远程桌面功能,可以在PC端访问目标设备的WinCE桌面。这个功能在调试的时候很有用。有些时候,你的目标板不带显示设备,这时你想访问目标板的WinCE系统感觉很不爽,毕竟习惯了桌面操作。通过WinCE远程桌面,你可以在PC上面访问目标板的WinCE桌面并进行操作。
下面来介绍一下具体步骤:
1. 选择支持WinCE远程桌面的组件:
在WinCE的工程中选择”Core OS”->”CEBASE”->”Core OS Services”->”Debugging Tools”->”Remote Display Application”,如下图:
在这里建议同时添加telnet组件,在”Core OS”->”CEBASE”->”Communication Services and Networking”->”Servers”->”Telnet Server”。由于目标板可能没有任何输入输出设备,所以添加Telnet组件可以在系统启动以后,登陆Telnet来执行命令。
2. 配置远程桌面主机IP地址:
打开WinCE工程的注册表文件project.reg,然后添加下面的内容。
[HKEY_LOCAL_MACHINE\SOFTWARE\CERDISP]
"Hostname"="192.168.0.88"
其中Hostname...

>> 阅读全文

作者:ARM-WinCE
WinCE系统中的控制面板和Windows系统中的控制面板原理是一样的,里面就是包含了一些应用程序。WinCE系统的控制面板由Ctlpnl.exe,Control.exe和一些.cpl文件组成,其中Ctlpnl.exe和Control.exe用于控制控制面板的文件夹显示和架构,而.cpl文件和控制面板中的实际应用程序相对应。
WinCE的控制面板中的每个应用程序都由两部分组成:应用程序本身和所对应的.cpl文件。实际上.cpl文件就是一个dll,在该dll中会导出CPLApplet函数,该函数会处理来自控制面板的消息(CPL_INIT, CPL_DBCLK, CPL_STOP等),然后根据相应的消息来调用应用程序。
先来看一下CPlApplet函数,如下:
LONG CPlApplet(HWND hwndCPl, UINT msg, LPARAM lParam1, LPARAM lParam2)
hwndCPl:控制面板窗口的句柄
msg:发给控制面应用程序的消息
lParam1:消息参数1
lParam2:消息参数2
该函数会根据msg参数传入的消息进行相应的处理,WinCE中所支持的控制面板消息如下:
CPL_INIT:被首次加载的时候会收到该消息,也是第一个消息,用于初始化控制面板应用程序,比如内存分配...

>> 阅读全文

作者:ARM-WinCE
添加应用程序到WinCE的开始菜单中应该是一个比较常用的功能,在产品定制的时候,添加本产品的应用到StartMenu中,让用户可以方便启动程序,下面就来介绍一下:
先说一下原理,其实在WinCE启动以后,点击Start,然后点击Programs,里面所能看到的应用其实也都是以文件的形式存放的,它们存放在\Windows\Programs目录下面,都是一些快捷方式文件,这些快捷方式文件连接了真正的应用程序,就这么简单。理解了这个原理,也就清楚该怎么做了,步骤如下:
1. 更改project.bib文件,添加应用程序,这里以Hello, world为例如下:
hello.exe d:\WINCE600\OSDesigns\Emulator\Emulator\RelDir\DeviceEmulator_ARMV4I_Release\hello.exe NK S
2. 为该应用程序创建一个快捷方式文件,可以新建一个*.txt文件,然后在里面添加:18#\windows\hello.exe,其中18表示后面的字符数,然后关闭该txt文件,重命名为hello.lnk,并将该文件拷贝到WinCE工程的release目录下面。
3. 更改project.bib文件,包含hello.lnk文件,如下:
hello.lnk d:\WINCE600\OSDesigns\Emulator\Emulator\RelDir\Devic...

>> 阅读全文

作者:ARM-WinCE
这个说起来比较简单,WinCE的文件目录结构以及文件的位置都是在DAT文件中定义的。所有的dat文件会在WinCE编译时合并成initobj.dat文件,WinCE会根据DAT中的描述生成相应目录。
关于DAT的格式,可以参考我以前的一片文章:”WinCE BSP的DAT文件介绍”,看了就明白了。
我一般在project.dat中定制自己想要的目录结构,举个例子如下:
root:-Directory("Sounds")
root:-Directory("Movies")
Directory("\Movies"):-Directory("Chinese")
Directory("\Movies"):-Directory("English")
Directory("\Sounds"):-File("hello.wav", "\Windows\hello.wav")
应该比较好理解,创建两个根文件夹Sounds和Movies,在Movies中创建两个子文件夹Chinese和English,将hello.wav拷贝到Sounds目录下。
编辑完project.dat以后,重新Makeimg就可以了。启动WinCE就可以看到所创建的文件夹了。
接下来说一下WinCE内存的定制。WinCE系统可使用的内存被分为...

>> 阅读全文

作者:ARM-WinCE
网上关于WinCE更换墙纸的文章一大堆,我也来写一篇,和网上已有的文章没什么区别。以前写的WinCE Blog大部分都是BSP相关的,以后打算写点WinCE系统定制方面的,就从这里开始吧。
关于WinCE的墙纸,是在注册表中设置的,编译完WinCE工程以后,所有的reg文件中的内容都会被合并为reginit.ini文件。打开这个文件,可以找到如下内容:
[HKEY_CURRENT_USER\ControlPanel\Desktop]
"wallpaper"=\\Windows\\WindowsCE.bmp
默认情况下,显示的是WindowsCE.bmp文件,但是被编译工程的release目录下并没有WindowsCE.bmp文件,倒是可以看到windowsce_qvgap.bmp和windowsce_vgal.bmp两个文件。这里需要看一下\WINCE600\public\shell\files\shell.bib文件中的定义就明白了。
说白了,更换墙纸就是改注册表设置。最简单的方法就是修改project.bib和project.reg文件。首先在project.bib文件中添加如下内容:
kungfuPanda.bmp d:\WINCE600\OSDesigns\Emulator\Emulator\RelDir\DeviceEmulator_ARMV4I_Release\wall.bmp NK S
然后在project.reg文件添加如下内容:>> 阅读全文