EVC里TOOLS->Config Platform Manager里, 对某个DEVICE点PROPERTIES, 这个对话框里可以选择EVC调试程序时所用的硬件途径, 其实就少少的这几个选项, 但由于本人的不思进取, 从开始接触到现在完全搞明白, 前后也将近半年时间才全部理解完.
方法一: KITL + CESH SERVER
在去年最早开发应用程序的时候,整组人都用的这个设置:
Transport: KITL Transport for Windows CE
Startup: CESH Server for Windows CE.
在MS的文档里强调了"To connect to a target device with the CESH startup server, you must enable KITL on the target device" (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcepb40/html/pbconceshstartupserver.asp) 从PB里实现KITL的三种硬件途径来看, 在EVC里使用这第一种方法来调试程序的代价就是三者选一
(1) 用了ETHERNET KITL, 那么EVC调试中就牺牲掉网卡,这样就无法调试需要访问网络资源的程序. ETHERNET KITL一起来后就把ETHER DRIVER给DISABEL掉了, 传说中有ETHER KITL和ETHERNET DRIVER同时使用的,可惜偶没见到过, 期待大虾把它改出来.
(2) 用了RNDIS KITL, 那么EVC调式中就牺牲掉USB口, 不能接键盘鼠标U盘等等. 这样搞的话其他开发人员就要跟我拼了.
(3) 用了SERIAL KITL, 牺牲掉调试速度, 调程序的时候旁边泡杯茶, 放一份报纸~
方法二: ActiveSync + ActiveSync
这是我接手PLAYER项目后力推的方案, 好处是可以把操作系统在FLASH里烧好, 这样应用程序开发者就可以无视操作系统, 并且EVC里调程序的时候不需要开PB了. (PB和EVC同时开, 256M内存的PC会搞得非常慢). 并且一旦调试中目标板上跑死机了,简单重启一下就行了,可以省去PB重新连接时间. 最重要的是可以空出ETHERNET资源,来调试PLAYER里那些HTTP, RTSP等需要用到网络的模块了.
但问题是同样地要损失掉USB PORT, 不能接键盘鼠标,当时我还特意写了个应用程序, 在PC端模仿遥控器操作,通过SERIAL给目标板上发遥控器动作的代码过去, 猥琐得一塌糊涂.
方法三: TCP/IP + MANUAL SERVER 闪亮登场
嗷傲, 灯光音效, 近乎完美的方法. 其实也很简单,只不过满足于前面两种方法的时间太长了, 一直没有深究下去.
具体设置是在Device Properties里面选择
Transport: TCP/IP Transport for Windows CE
Startup: Manual Server
如下图所示
这时候去点TEST, EVC这边会弹出这个对话框.
如果不是特意在BIB文件里加入这三个文件的话,一般IMAGE里是不包含他们的. 这三个文件可以在 WINCE500\OTHERS\PLATMAN\TARGET\ 下对应CPU类型的子目录里找到. 拿个U盘COPY到目标板的\WINDOWS\目录下.
然后目标板上 开始->运行->cmd, 在命令行窗口里敲入上图对话框里的那行命令, 这时候目标板上的命令行窗口会处于等待状态,而不是出现下一个提示符, 此时在PC端的EVC按下OK, 那么连接就成功了. 在调试的时候同样地, 先在目标板上敲命令行,处于等待状态时, EVC这边点GO就行了.
然后我们注意看这条命令: CEMGRC.EXE /S /T:TCPIPC.DLL /Q /D:10.100.148.124:2777
实际上这个EVC调试就是一个CS结构, 目标板上是CLIENT, PC上是SERVER, 连接由CLIENT发起. CESH用的DEBUG SHELL, ACTIVESYNC在IMAGE里加入的ACTIESYNC组件, 还有这个CEMGRC, 都是干的同样的事情。扯远了, 我们退回到Device Properties窗口, 对Transport点Configure, 出现如下窗口
我只写一下窗口里影响到CEMGRC参数的设置, 关于CEMGRC的参数在MSDN上只字不提,只能靠推测.
(1) 首先是Host IP, 在Use fixed address的下拉列表里, 你有几个网卡(包括虚拟网卡),就有几个当前网卡配置的IP地址可选, 选择后确定下来的IP地址就体现到 /D 参数里了, 这个推论要是错了我就去找块豆腐撞死.
(2) 然后是端口, 如果不勾选 fixed port 的话,每次连接都会随机选个端口, 然后在/D参数的:2777这个地方体现出每次端口的不同. 这样在目标板上敲命令行就稍微麻烦些, 如果我们勾了FIXED PORT, 并且指定一个PORT NUMBER, 那么CEMGRC的参数里除了/D后面的端口号被固定下来外, 还多了个/S ,估计是表示static port的意思. 在实际操作时我把这个/S省掉,也是连得上的,没什么影响
用这种方法在EVC里调试, 真是落霞与孤骛齐飞, 控制信息与网络访问共享, ETHERNET和USB HOST并存, 乖乖咙地咚, 皆大欢喜啊.