zhongqian 2008-6-13 05:55 PM
WinCE驱动开发问题精华集锦四
[align=center]WinCE驱动开发问题精华集锦[/align][table=97%][tr][td=1,1,120][日期:2008-04-30][/td][td]来源:中嵌网 作者:aea22[/td][td=1,1,100][字体:[color=#0000ff]大[/color] [color=#0000ff]中[/color] [color=#0000ff]小[/color]] [/td][/tr][/table][font=宋体][size=9pt]为什么[/size][/font][font=Arial][size=9pt]WINCE[/size][/font][font=宋体][size=9pt]目录下的例子用[/size][/font][font=Arial][size=9pt]build+sysgen[/size][/font][font=宋体][size=9pt]能够编译成[/size][/font][font=Arial][size=9pt]EXE[/size][/font][font=宋体][size=9pt]文件,而我添加的例子就不能编译呢?[/size][/font]
[font=宋体][size=9pt]如果这个例子是一个应用程序,那么肯定包括代码文件([/size][/font][font=Arial][size=9pt].h .c .cpp[/size][/font][font=宋体][size=9pt])和资源文件([/size][/font][font=Arial][size=9pt].rc[/size][/font][font=宋体][size=9pt]和其它资源文件),[/size][/font][font=Arial][size=9pt]build[/size][/font][font=宋体][size=9pt]工具根据[/size][/font][font=Arial][size=9pt]source[/size][/font][font=宋体][size=9pt]文件内容把代码文件编译成[/size][/font][font=Arial][size=9pt]lib[/size][/font][font=宋体][size=9pt]文件,资源文件编译成[/size][/font][font=Arial][size=9pt].res[/size][/font][font=宋体][size=9pt]文件,[/size][/font][font=Arial][size=9pt]sysgen[/size][/font][font=宋体][size=9pt]工具根据[/size][/font][font=Arial][size=9pt]makefile[/size][/font][font=宋体][size=9pt]文件内容将[/size][/font][font=Arial][size=9pt]source[/size][/font][font=宋体][size=9pt]文件中列出的需要链接的各个库文件合并成一个[/size][/font][font=Arial][size=9pt]EXE[/size][/font][font=宋体][size=9pt]文件。所以说关键在于[/size][/font][font=Arial][size=9pt]makefile[/size][/font][font=宋体][size=9pt]文件,[/size][/font][font=Arial][size=9pt]WINCE[/size][/font][font=宋体][size=9pt]目录下凡是能够用[/size][/font][font=Arial][size=9pt]build+sysgen[/size][/font][font=宋体][size=9pt]编译的都在[/size][/font][font=Arial][size=9pt]makefile[/size][/font][font=宋体][size=9pt]中有如何链接的设置,而我们添加的例子当然没有在[/size][/font][font=Arial][size=9pt]makefile[/size][/font][font=宋体][size=9pt]中找到如何链接的设置,[/size][/font][font=Arial][size=9pt]nmake[/size][/font][font=宋体][size=9pt]工具就会提示不知道如何创建。[/size][/font][font=Arial][size=9pt]
pcienum.exe[/size][/font][font=宋体][size=9pt]干什么用的?[/size][/font]
[font=宋体][size=9pt]如果你要开发某一个[/size][/font][font=Arial][size=9pt]PCI[/size][/font][font=宋体][size=9pt]设备的驱动程序,首先要知道这个[/size][/font][font=Arial][size=9pt]PCI[/size][/font][font=宋体][size=9pt]设备的信息(如[/size][/font][font=Arial][size=9pt]VendorID[/size][/font][font=宋体][size=9pt]、[/size][/font][font=Arial][size=9pt]DeviceID[/size][/font][font=宋体][size=9pt]、[/size][/font][font=Arial][size=9pt]BaseClass[/size][/font][font=宋体][size=9pt]、[/size][/font][font=Arial][size=9pt] SubClass[/size][/font][font=宋体][size=9pt])和[/size][/font][font=Arial][size=9pt]PCI[/size][/font][font=宋体][size=9pt]总线的信息。运行这个[/size][/font][font=Arial][size=9pt]pcienum.exe[/size][/font][font=宋体][size=9pt]就能得到相关信息。[/size][/font][font=Arial][size=9pt]pcienum.exe[/size][/font][font=宋体][size=9pt]提供了源码,位置[/size][/font][font=Arial][size=9pt]\Public\ Common\Oak\Drivers\Ceddk\Test\Pcienum[/size][/font][font=宋体][size=9pt]。[/size][/font][font=Arial][size=9pt]
wince[/size][/font][font=宋体][size=9pt]下如何让操作系统进入待机模式?又如何把它激活?[/size][/font]
[font=宋体][size=9pt]通过注册表就可以设置,前提是你的驱动和硬件都支持。注册表项参见标题为[/size][/font][font=Arial][size=9pt]“GWES Suspend Time-outs”[/size][/font][font=宋体][size=9pt]的帮助文档。[/size][/font][font=Arial][size=9pt]
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Power]
"BattPowerOff"=dword:300
"ExtPowerOff"=dword:0
"WakeupPowerOff"=dword:60
"ScreenPowerOff"=dword:0
[/size][/font][font=宋体][size=9pt]现有一个[/size][/font][font=Arial][size=9pt]GPRS[/size][/font][font=宋体][size=9pt]模块,如何通过[/size][/font][font=Arial][size=9pt]GPRS[/size][/font][font=宋体][size=9pt]连接到[/size][/font][font=Arial][size=9pt]Internet[/size][/font][font=宋体][size=9pt]?[/size][/font][font=Arial][size=9pt]
1[/size][/font][font=宋体][size=9pt]、先在内核中加入[/size][/font][font=Arial][size=9pt]WAN[/size][/font][font=宋体][size=9pt]下面的几个组件,如[/size][/font][font=Arial][size=9pt]RAS/PPP[/size][/font][font=宋体][size=9pt]、[/size][/font][font=Arial][size=9pt]TAPI[/size][/font][font=宋体][size=9pt]。[/size][/font][font=Arial][size=9pt]WINCE[/size][/font][font=宋体][size=9pt]采用[/size][/font][font=Arial][size=9pt]unimodem[/size][/font][font=宋体][size=9pt]驱动,所以不必担心没有[/size][/font][font=Arial][size=9pt]Modem[/size][/font][font=宋体][size=9pt]驱动的支持。[/size][/font][font=Arial][size=9pt]
2[/size][/font][font=宋体][size=9pt]、[/size][/font][font=Arial][size=9pt]WINCE[/size][/font][font=宋体][size=9pt]启动后新建一个拨号连接,比如名称叫[/size][/font][font=Arial][size=9pt]“gprs1”[/size][/font][font=宋体][size=9pt],输入用户名、密码、电话号码。电话号码不同,所采用的模式不一样,例如[/size][/font][font=Arial][size=9pt]“*99#”[/size][/font][font=宋体][size=9pt]是[/size][/font][font=Arial][size=9pt]GPRS[/size][/font][font=宋体][size=9pt]模式,[/size][/font][font=Arial][size=9pt]“17201”[/size][/font][font=宋体][size=9pt]是普通的数据模式,速度差很多,价钱也差很多。[/size][/font][font=Arial][size=9pt]
3[/size][/font][font=宋体][size=9pt]、开始连接,连接过程会在对话框中显示,直到显示[/size][/font][font=Arial][size=9pt]“[/size][/font][font=宋体][size=9pt]连接成功[/size][/font][font=Arial][size=9pt]”[/size][/font][font=宋体][size=9pt]。[/size][/font][font=Arial][size=9pt]
4[/size][/font][font=宋体][size=9pt]、打开浏览器或者自己开发的通讯软件测试网络连接情况。[/size][/font][font=Arial][size=9pt]
5[/size][/font][font=宋体][size=9pt]、关闭连接。[/size][/font][font=Arial][size=9pt]
6[/size][/font][font=宋体][size=9pt]、保存[/size][/font][font=Arial][size=9pt][HKEY_CURRENT_USER\Comm\RasBook\gprs1][/size][/font][font=宋体][size=9pt]下的所有数据,添加到[/size][/font][font=Arial][size=9pt]project.reg[/size][/font][font=宋体][size=9pt]中,重新编译后内核中就有了一个拨号连接[/size][/font][font=Arial][size=9pt]“gprs1”[/size][/font][font=宋体][size=9pt]。[/size][/font][font=Arial][size=9pt]
7[/size][/font][font=宋体][size=9pt]、调用[/size][/font][font=Arial][size=9pt]RAS[/size][/font][font=宋体][size=9pt]函数可以修改拨号连接[/size][/font][font=Arial][size=9pt]“gprs1”[/size][/font][font=宋体][size=9pt]的参数,如用户名、密码、电话号码,但是不能修改硬件设置,如波特率、串口、数据位、停止位等。[/size][/font][font=Arial][size=9pt]RAS[/size][/font][font=宋体][size=9pt]函数还能够拨号、挂断。为了修改波特率可以多保存几个拨号连接,也可以直接调用[/size][/font][font=Arial][size=9pt]TAPI[/size][/font][font=宋体][size=9pt]开发拨号软件,另外[/size][/font][font=Arial][size=9pt]WINCE[/size][/font][font=宋体][size=9pt]自带的拨号连接是有源码的,位置在[/size][/font][font=Arial][size=9pt]\ PUBLIC\COMMON\OAK\DRIVERS\NETSAMP\CONNMC[/size][/font][font=宋体][size=9pt]。[/size][/font]
[font=宋体][size=9pt]采用基于[/size][/font][font=Arial][size=9pt]HIVE[/size][/font][font=宋体][size=9pt]的注册表如何删除用户保存在注册表中的数据,恢复到出厂时的注册表?[/size][/font]
[font=宋体][size=9pt]用户修改的数据保存在[/size][/font][font=Arial][size=9pt]user.hv[/size][/font][font=宋体][size=9pt]文件中,直接删除一定失败,所以不能通过删除文件实现恢复出厂设置。微软考虑到了这个问题,在[/size][/font][font=Arial][size=9pt]WINCE[/size][/font][font=宋体][size=9pt]启动过程中[/size][/font][font=Arial][size=9pt] filesys.exe[/size][/font][font=宋体][size=9pt]加载注册表时会调用[/size][/font][font=Arial][size=9pt]OEMIoControl[/size][/font][font=宋体][size=9pt]函数并传递一个[/size][/font][font=Arial][size=9pt]IOCTL[/size][/font][font=宋体][size=9pt],这个[/size][/font][font=Arial][size=9pt]IOCTL[/size][/font][font=宋体][size=9pt]在[/size][/font][font=Arial][size=9pt]pkfuncs.h[/size][/font][font=宋体][size=9pt]中定义如下:[/size][/font][font=Arial][size=9pt]
#define IOCTL_HAL_GET_HIVE_CLEAN_FLAG CTL_CODE(FILE_DEVICE_HAL, 49, METHOD_BUFFERED, FILE_ANY_ACCESS)
filesys.exe [/size][/font][font=宋体][size=9pt]会分别传递参数[/size][/font][font=Arial][size=9pt]HIVECLEANFLAG_SYSTEM[/size][/font][font=宋体][size=9pt]和[/size][/font][font=Arial][size=9pt]HIVECLEANFLAG_USERS[/size][/font][font=宋体][size=9pt],如果返回值为[/size][/font][font=Arial][size=9pt]TRUE[/size][/font][font=宋体][size=9pt]那么[/size][/font][font=Arial][size=9pt]filesys.exe[/size][/font][font=宋体][size=9pt]清除原来的注册表文件,如果返回值为[/size][/font][font=Arial][size=9pt]FALSE[/size][/font][font=宋体][size=9pt]那么[/size][/font][font=Arial][size=9pt]filesys.exe[/size][/font][font=宋体][size=9pt]保留原来的注册表文件。默认[/size][/font][font=Arial][size=9pt]WINCE[/size][/font][font=宋体][size=9pt]并没有实现这个[/size][/font][font=Arial][size=9pt]IOCTL[/size][/font][font=宋体][size=9pt],所以[/size][/font][font=Arial][size=9pt]OEM[/size][/font][font=宋体][size=9pt]要删除注册表文件就必须先编写这个[/size][/font][font=Arial][size=9pt]IOCTL[/size][/font][font=宋体][size=9pt]代码。代码的例子可参考标题为[/size][/font][font=Arial][size=9pt]“IOCTL_HAL_GET_HIVE_CLEAN_FLAG”[/size][/font][font=宋体][size=9pt]的帮助文档。另外必须在[/size][/font][font=Arial][size=9pt]ioctl.h[/size][/font][font=宋体][size=9pt]和[/size][/font][font=Arial][size=9pt]ioctl.c[/size][/font][font=宋体][size=9pt]两个文件中编写该代码。在[/size][/font][font=Arial][size=9pt]ioctl.c[/size][/font][font=宋体][size=9pt]文件中找到[/size][/font][font=Arial][size=9pt] const OAL_IOCTL_HANDLER g_oalIoCtlTable[][/size][/font][font=宋体][size=9pt],添加[/size][/font][font=Arial][size=9pt]IOCTL[/size][/font][font=宋体][size=9pt]和对应的处理函数。要进一步了解这个全局数组,参见标题为[/size][/font][font=Arial][size=9pt]“IOCTL Library”[/size][/font][font=宋体][size=9pt]的帮助文档。[/size][/font]
[font=宋体][size=9pt]如何在不删除必要组件的前提下减小内核文件长度?[/size][/font]
[font=宋体][size=9pt]要减小内核文件长度首先要在使用[/size][/font][font=Arial][size=9pt]PB[/size][/font][font=宋体][size=9pt]的定制内核向导中选择自定义,也就是说对于每个组件都由自己来选择,而不是选择[/size][/font][font=Arial][size=9pt]PB[/size][/font][font=宋体][size=9pt]的标准配置。但减小内核文件长度最有效最直接的办法是缩小字体,尤其对于东亚字体,采用字体压缩技术并且选择合理的字库文件将明显缩小文件长度。[/size][/font][font=Arial][size=9pt]
1[/size][/font][font=宋体][size=9pt]、在定制内核时选择[/size][/font][font=Arial][size=9pt]AGFA AC3 Font Compression[/size][/font][font=宋体][size=9pt]组件。[/size][/font][font=Arial][size=9pt]SYSGEN[/size][/font][font=宋体][size=9pt]变量为[/size][/font][font=Arial][size=9pt]SYSGEN_AGFA_FONT[/size][/font][font=宋体][size=9pt]。[/size][/font][font=Arial][size=9pt]
2[/size][/font][font=宋体][size=9pt]、参考标题为[/size][/font][font=Arial][size=9pt]“East Asian Font Versions”[/size][/font][font=宋体][size=9pt]的帮助文档,从中选择你需要的字库文件加到内核中,从文档可以看出加[/size][/font][font=Arial][size=9pt]AC3[/size][/font][font=宋体][size=9pt]压缩比不加压缩在文件长度方面差距很大。[/size][/font]
[font=宋体][size=9pt]如何得到[/size][/font][font=Arial][size=9pt]WAV[/size][/font][font=宋体][size=9pt]文件播放的总时间?[/size][/font][font=Arial][size=9pt]
1[/size][/font][font=宋体][size=9pt]、直接读取[/size][/font][font=Arial][size=9pt]wav[/size][/font][font=宋体][size=9pt]文件头信息,从文件起始地址偏移[/size][/font][font=Arial][size=9pt]28[/size][/font][font=宋体][size=9pt]个字节长度为[/size][/font][font=Arial][size=9pt]4[/size][/font][font=宋体][size=9pt]个字节保存的是每秒钟播放的字节数,从文件起始地址偏移[/size][/font][font=Arial][size=9pt]40[/size][/font][font=宋体][size=9pt]个字节长度为[/size][/font][font=Arial][size=9pt]4[/size][/font][font=宋体][size=9pt]个字节保存的是声音数据的总的字节数,相除就是播放时间。[/size][/font][font=Arial][size=9pt]
2[/size][/font][font=宋体][size=9pt]、调用[/size][/font][font=Arial][size=9pt]IGraphBuilder::RenderFile[/size][/font][font=宋体][size=9pt]打开一个[/size][/font][font=Arial][size=9pt]wav[/size][/font][font=宋体][size=9pt]文件,然后通过[/size][/font][font=Arial][size=9pt]IGraphBuilder[/size][/font][font=宋体][size=9pt]得到[/size][/font][font=Arial][size=9pt]IMediaSeeking[/size][/font][font=宋体][size=9pt]指针,再调用[/size][/font][font=Arial][size=9pt]IMediaSeeking::GetDuration[/size][/font][font=宋体][size=9pt]得到总的时间(结果要除以[/size][/font][font=Arial][size=9pt]10000000[/size][/font][font=宋体][size=9pt]),[/size][/font][font=Arial][size=9pt]IMediaSeeking:: GetCurrentPosition[/size][/font][font=宋体][size=9pt]得到当前播放时间。[/size][/font]
[font=宋体][size=9pt]如何在[/size][/font][font=Arial][size=9pt]Dialog-Based[/size][/font][font=宋体][size=9pt]程序中加入[/size][/font][font=Arial][size=9pt]menubar[/size][/font][font=宋体][size=9pt]?[/size][/font]
[font=宋体][size=9pt]先调用[/size][/font][font=Arial][size=9pt]CommandBar_Create[/size][/font][font=宋体][size=9pt]再调用[/size][/font][font=Arial][size=9pt]CommandBar_InsertMenubar[/size][/font][font=宋体][size=9pt]。[/size][/font]
[font=宋体][size=9pt]请问[/size][/font][font=Arial][size=9pt]MultiByteToWideChar[/size][/font][font=宋体][size=9pt]与[/size][/font][font=Arial][size=9pt]_T[/size][/font][font=宋体][size=9pt]、[/size][/font][font=Arial][size=9pt]L[/size][/font][font=宋体][size=9pt]、[/size][/font][font=Arial][size=9pt]TEXT[/size][/font][font=宋体][size=9pt]的区别?[/size][/font][font=Arial][size=9pt]
MultiByteToWideChar[/size][/font][font=宋体][size=9pt]函数转换的对象可以是常量也可以是变量。其它只能转换常量。[/size][/font][font=Arial][size=9pt]_T[/size][/font][font=宋体][size=9pt]和[/size][/font][font=Arial][size=9pt]TEXT[/size][/font][font=宋体][size=9pt]会根据当前系统是否定义[/size][/font][font=Arial][size=9pt]_UNICODE[/size][/font][font=宋体][size=9pt]宏来决定是否转换,而[/size][/font][font=Arial][size=9pt]L[/size][/font][font=宋体][size=9pt]就是转换成宽字符,当然也包括其他类型常量的转换。[/size][/font]
[font=宋体][size=9pt]在用[/size][/font][font=Arial][size=9pt]UBS[/size][/font][font=宋体][size=9pt]线缆通过[/size][/font][font=Arial][size=9pt]ActiveSync[/size][/font][font=宋体][size=9pt]同步有效的情况下,如何插上[/size][/font][font=Arial][size=9pt]USB[/size][/font][font=宋体][size=9pt]线缆后[/size][/font][font=Arial][size=9pt]WINCE[/size][/font][font=宋体][size=9pt]自动与[/size][/font][font=Arial][size=9pt]PC[/size][/font][font=宋体][size=9pt]同步?[/size][/font][font=Arial][size=9pt]
1[/size][/font][font=宋体][size=9pt]、新建一个拨号连接,假设名称为[/size][/font][font=Arial][size=9pt]“usb1”[/size][/font][font=宋体][size=9pt],选择连接类型为[/size][/font][font=Arial][size=9pt]“[/size][/font][font=宋体][size=9pt]直接连接[/size][/font][font=Arial][size=9pt]”[/size][/font][font=宋体][size=9pt],并在连接设备里选择通过[/size][/font][font=Arial][size=9pt]USB[/size][/font][font=宋体][size=9pt]线缆连接。[/size][/font][font=Arial][size=9pt]
2[/size][/font][font=宋体][size=9pt]、将注册表[/size][/font][font=Arial][size=9pt][HKEY_CURRENT_USER\Comm\RasBook\usb1][/size][/font][font=宋体][size=9pt]下的数据添加到[/size][/font][font=Arial][size=9pt]project.reg[/size][/font][font=宋体][size=9pt]或者[/size][/font][font=Arial][size=9pt]platform.reg[/size][/font][font=宋体][size=9pt]中。[/size][/font][font=Arial][size=9pt]
3[/size][/font][font=宋体][size=9pt]、在[/size][/font][font=Arial][size=9pt][HKEY_CURRENT_USER\ControlPanel\Comm][/size][/font][font=宋体][size=9pt]下添加如下:[/size][/font][font=Arial][size=9pt]
"AutoCnct"=dword:1 ///[/size][/font][font=宋体][size=9pt]直接连接[/size][/font][font=Arial][size=9pt]
"Cnct"="usb1" ///[/size][/font][font=宋体][size=9pt]连接名称[/size][/font][font=Arial][size=9pt]
4[/size][/font][font=宋体][size=9pt]、重新编译内核。为了节省编译时间也可以在内核工程下搜索[/size][/font][font=Arial][size=9pt]*.reg[/size][/font][font=宋体][size=9pt]文件,将[/size][/font][font=Arial][size=9pt]2[/size][/font][font=宋体][size=9pt]、[/size][/font][font=Arial][size=9pt]3[/size][/font][font=宋体][size=9pt]步骤中的注册表数据添加其中,然后直接[/size][/font][font=Arial][size=9pt]make image[/size][/font][font=宋体][size=9pt]。[/size][/font]
[font=宋体][size=9pt]如何通过进程句柄来获得该进程的主窗口句柄?[/size][/font]
[font=宋体][size=9pt]好像没有[/size][/font][font=Arial][size=9pt]API[/size][/font][font=宋体][size=9pt]能够通过进程句柄直接获得主窗口的句柄,因为并非每个应用程序都带[/size][/font][font=Arial][size=9pt]UI[/size][/font][font=宋体][size=9pt]。但是可以反过来,先枚举当前系统所有主窗口,然后根据每个窗口的句柄调用[/size][/font][font=Arial][size=9pt]GetWindowThreadProcessId[/size][/font][font=宋体][size=9pt]函数得到进程的[/size][/font][font=Arial][size=9pt]ID[/size][/font][font=宋体][size=9pt],再调用[/size][/font][font=Arial][size=9pt]OpenProcess[/size][/font][font=宋体][size=9pt]得到进程句柄,与现有的进程句柄比较。[/size][/font]
[font=宋体][size=9pt]我做的显示驱动[/size][/font][font=Arial][size=9pt]DLL[/size][/font][font=宋体][size=9pt]已经编译成功了,但是在加载显示驱动的过程中弹出话框,提示如下:[/size][/font][font=Arial][size=9pt]
unhandled exception in gwes.exe (0xc0000005 access violation)
[/size][/font][font=宋体][size=9pt]提示的错误[/size][/font][font=Arial][size=9pt]——[/size][/font][font=宋体][size=9pt]地址访问非法,表明你的驱动程序代码并没有在读写数据前添加[/size][/font][font=Arial][size=9pt]SetKMode(TRUE)[/size][/font][font=宋体][size=9pt]或者[/size][/font][font=Arial][size=9pt]SetProcPermissions (0xFFFFFFFF)[/size][/font][font=宋体][size=9pt]函数让线程能够访问任何进程的地址空间。你可以调用[/size][/font][font=Arial][size=9pt] IsBadReadPtr[/size][/font][font=宋体][size=9pt]和[/size][/font][font=Arial][size=9pt]IsBadWritePtr[/size][/font][font=宋体][size=9pt]函数检测地址是否能够合法访问。编写和[/size][/font][font=Arial][size=9pt]gwes[/size][/font][font=宋体][size=9pt]有关的驱动程序应该首先调用[/size][/font][font=Arial][size=9pt]SetKMode(TRUE)[/size][/font][font=宋体][size=9pt]或者[/size][/font][font=Arial][size=9pt]SetProcPermissions(0xFFFFFFFF) [/size][/font][font=宋体][size=9pt]函数,这是一个好习惯。[/size][/font]
[font=宋体][size=9pt]请问在[url=http://www.chinaeda.cn/edu/jiuye_1.html][color=#800080]嵌入式[/color][/url]系统中如何设置[/size][/font][font=Arial][size=9pt]GPRS[/size][/font][font=宋体][size=9pt]拔号用的[/size][/font][font=Arial][size=9pt]APN[/size][/font][font=宋体][size=9pt]?[/size][/font]
[font=宋体][size=9pt]对一个拨号连接比如[/size][/font][font=Arial][size=9pt]“[/size][/font][font=宋体][size=9pt]我的连接[/size][/font][font=Arial][size=9pt]”[/size][/font][font=宋体][size=9pt]单击鼠标右键,在弹出的菜单中选择[/size][/font][font=Arial][size=9pt]“[/size][/font][font=宋体][size=9pt]属性[/size][/font][font=Arial][size=9pt]”[/size][/font][font=宋体][size=9pt],然后单击[/size][/font][font=Arial][size=9pt]“[/size][/font][font=宋体][size=9pt]配置[/size][/font][font=Arial][size=9pt]”—“[/size][/font][font=宋体][size=9pt]拨号选项[/size][/font][font=Arial][size=9pt]”[/size][/font][font=宋体][size=9pt],在[/size][/font][font=Arial][size=9pt]“[/size][/font][font=宋体][size=9pt]附加设置[/size][/font][font=Arial][size=9pt]”[/size][/font][font=宋体][size=9pt]中添加[/size][/font][font=Arial][size=9pt]AT[/size][/font][font=宋体][size=9pt]命令如[/size][/font][font=Arial][size=9pt]“+cgdcont=1,"ip","cmnet"”[/size][/font][font=宋体][size=9pt]。[/size][/font][font=Arial][size=9pt]“cmnet”[/size][/font][font=宋体][size=9pt]位置即为[/size][/font][font=Arial][size=9pt]APN[/size][/font][font=宋体][size=9pt]。[/size][/font][font=Arial][size=9pt]
WINCE[/size][/font][font=宋体][size=9pt]的[/size][/font][font=Arial][size=9pt]IP Phone[/size][/font][font=宋体][size=9pt]功能如何?[/size][/font][font=Arial][size=9pt]
WINCE[/size][/font][font=宋体][size=9pt]的[/size][/font][font=Arial][size=9pt]voip[/size][/font][font=宋体][size=9pt]需要[/size][/font][font=Arial][size=9pt]c-s-c[/size][/font][font=宋体][size=9pt]结构,既需要服务器的中转,而[/size][/font][font=Arial][size=9pt]skype[/size][/font][font=宋体][size=9pt]采用第三代[/size][/font][font=Arial][size=9pt]p2p[/size][/font][font=宋体][size=9pt]技术就不需要中转,但是在[/size][/font][font=Arial][size=9pt]gprs[/size][/font][font=宋体][size=9pt]下也做不到语音流畅。[/size][/font][font=Arial][size=9pt]skype[/size][/font][font=宋体][size=9pt]有[/size][/font][font=Arial][size=9pt]pocket pc[/size][/font][font=宋体][size=9pt]版本,但是无线方面需要[/size][/font][font=Arial][size=9pt]wlan[/size][/font][font=宋体][size=9pt]或者[/size][/font][font=Arial][size=9pt]cdma[/size][/font][font=宋体][size=9pt]。[/size][/font]
[font=宋体][size=9pt]三星[/size][/font][font=Arial][size=9pt][url=http://www.chinaeda.cn/edu/gaoji.html][color=#800080]ARM[/color][/url][/size][/font][font=宋体][size=9pt]平台如何定义自己的中断[/size][/font][font=Arial][size=9pt]ID[/size][/font][font=宋体][size=9pt]?[/size][/font]
[font=宋体][size=9pt]以[/size][/font][font=Arial][size=9pt]S3C2410 [/size][/font][font=宋体][size=9pt]为例,在[/size][/font][font=Arial][size=9pt]oalintr.h[/size][/font][font=宋体][size=9pt]文件中定义中断[/size][/font][font=Arial][size=9pt]ID[/size][/font][font=宋体][size=9pt],也称[/size][/font][font=Arial][size=9pt]SYSINTR[/size][/font][font=宋体][size=9pt],例如[/size][/font][font=Arial][size=9pt] #define SYSINTR_MYINT (SYSINTR_FIRMWARE+20)[/size][/font][font=宋体][size=9pt],最大值不能超过[/size][/font][font=Arial][size=9pt]SYSINTR_FIRMWARE+23[/size][/font][font=宋体][size=9pt]。然后在[/size][/font][font=Arial][size=9pt][url=http://www.chinaeda.cn/edu/gaoji.html][color=#800080]ARM[/color][/url]int.c[/size][/font][font=宋体][size=9pt]文件中找到[/size][/font][font=Arial][size=9pt] OEMInterruptHandler[/size][/font][font=宋体][size=9pt]函数,用[/size][/font][font=Arial][size=9pt]if (IntPendVal == INTSRC_XXX) [/size][/font][font=宋体][size=9pt]判断当前发生的中断源号,然后返回[/size][/font][font=Arial][size=9pt] SYSINTR_MYINT[/size][/font][font=宋体][size=9pt]。内核分别调用[/size][/font][font=Arial][size=9pt]OEMInterruptDisable[/size][/font][font=宋体][size=9pt](禁止当前中断)、[/size][/font][font=Arial][size=9pt]OEMInterruptDone[/size][/font][font=宋体][size=9pt](中断处理结束)、[/size][/font][font=Arial][size=9pt]OEMInterruptEnable[/size][/font][font=宋体][size=9pt](当前中断有效)三个函数,参数都为中断[/size][/font][font=Arial][size=9pt]ID[/size][/font][font=宋体][size=9pt],在这三个函数中用[/size][/font][font=Arial][size=9pt] case SYSINTR_MYINT[/size][/font][font=宋体][size=9pt]判断当前要处理的中断。[/size][/font]
[font=宋体][size=9pt]如何开发软件从[/size][/font][font=Arial][size=9pt]PC[/size][/font][font=宋体][size=9pt]端复制文件到基于[/size][/font][font=Arial][size=9pt]WINCE[/size][/font][font=宋体][size=9pt]的设备?[/size][/font]
[font=宋体][size=9pt]调用[/size][/font][font=Arial][size=9pt]RAPI [/size][/font][font=宋体][size=9pt]([/size][/font][font=Arial][size=9pt]Remote Application Programming Interface[/size][/font][font=宋体][size=9pt])函数,此函数集由桌面计算机调用,由基于[/size][/font][font=Arial][size=9pt]WINCE[/size][/font][font=宋体][size=9pt]的设备执行。一旦连接上就可以在桌面计算机端调用[/size][/font][font=Arial][size=9pt]RAPI[/size][/font][font=宋体][size=9pt]。通过注册表还可以限制[/size][/font][font=Arial][size=9pt]RAPI[/size][/font][font=宋体][size=9pt]能够访问目录的范围。具体参考[/size][/font][font=Arial][size=9pt]RAPI[/size][/font][font=宋体][size=9pt]和[/size][/font][font=Arial][size=9pt]RDP[/size][/font][font=宋体][size=9pt](远程桌面协议)。[/size][/font]
[font=宋体][size=9pt]请问如何对[/size][/font][font=Arial][size=9pt]NandFlash[/size][/font][font=宋体][size=9pt]分区、格式化?[/size][/font]
[font=宋体][size=9pt]你看看[/size][/font][font=Arial][size=9pt]WINCE420\PUBLIC\COMMON\OAK\DRIVERS\ETHDBG\BOOTPART\bootpart.cpp[/size][/font][font=宋体][size=9pt],在[/size][/font][font=Arial][size=9pt]Eboot[/size][/font][font=宋体][size=9pt]中先要调用[/size][/font][font=Arial][size=9pt]BP_LowLevelFormat(
DWORD dwStartBlock, DWORD dwNumBlocks, DWORD dwFlags)[/size][/font][font=宋体][size=9pt]再[/size][/font][font=Arial][size=9pt]flash[/size][/font][font=宋体][size=9pt]的一个区域建立空的[/size][/font][font=Arial][size=9pt]MBR,[/size][/font][font=宋体][size=9pt]然后连续两次调用[/size][/font][font=Arial][size=9pt] BP_OpenPartition(DWORD dwStartSector, DWORD dwNumSectors, DWORD dwPartType, BOOL fActive, DWORD dwCreationFlags)[/size][/font][font=宋体][size=9pt]函数来建立[/size][/font][font=Arial][size=9pt]BINFS[/size][/font][font=宋体][size=9pt]和[/size][/font][font=Arial][size=9pt]FAT[/size][/font][font=宋体][size=9pt]分区。建好后,将[/size][/font][font=Arial][size=9pt]nk.bin[/size][/font][font=宋体][size=9pt]烧入[/size][/font][font=Arial][size=9pt]binfs [/size][/font][font=宋体][size=9pt]分区中。[/size][/font]
[font=宋体][size=9pt]要做个弹出对话框具有[/size][/font][font=Arial][size=9pt] always on top [/size][/font][font=宋体][size=9pt]属性,如何实现?[/size][/font]
[font=宋体][size=9pt]调用[/size][/font][font=Arial][size=9pt]SetWindowPos(.. , HWND_TOPMOST, ...., SWP_NOACTIVATE)[/size][/font][font=宋体][size=9pt]。[/size][/font][font=Arial][size=9pt]
s3c2410[/size][/font][font=宋体][size=9pt]+[/size][/font][font=Arial][size=9pt]WINCE[/size][/font][font=宋体][size=9pt]下网络[/size][/font][font=Arial][size=9pt]PING[/size][/font][font=宋体][size=9pt]一会就断,如何解决?[/size][/font]
[font=宋体][size=9pt]原因在于中断处理程序把已经产生的中断标志清除掉了,这样就丢失一次中断。因为原驱动里配置中断为上升沿触发,一次中断丢失就导致不会再产生中断信号跳变,因为只有在中断服务中读取了[/size][/font][font=Arial][size=9pt]cs8900[/size][/font][font=宋体][size=9pt]的[/size][/font][font=Arial][size=9pt] Interrupt status queue[/size][/font][font=宋体][size=9pt]寄存器后,才会产生下一次中断!解决办法:[/size][/font][font=Arial][size=9pt]
1[/size][/font][font=宋体][size=9pt]、在[/size][/font][font=Arial][size=9pt]cfw.c[/size][/font][font=宋体][size=9pt]文件中全局定义[/size][/font][font=Arial][size=9pt]BOOL Inited = FALSE
2[/size][/font][font=宋体][size=9pt]、修改[/size][/font][font=Arial][size=9pt]OEMInterruptEnable()[/size][/font][font=宋体][size=9pt]中[/size][/font][font=Arial][size=9pt]case SYSINTR_ETHER: [/size][/font][font=宋体][size=9pt]下面的语句为:[/size][/font][font=Arial][size=9pt]
if(Inited == FALSE)
{
s2410IOP->rEINTPEND = 0x200;
s2410INT->rSRCPND = BIT_EINT8_23;
if (s2410INT->rINTPND & BIT_EINT8_23)
s2410INT->rINTPND = BIT_EINT8_23;
Inited = TRUE;
}
s2410IOP->rEINTMASK &= ~0x200;
s2410INT->rINTMSK &= ~BIT_EINT8_23;
break[/size][/font][font=宋体][size=9pt];[/size][/font]
[font=宋体][size=9pt]注:本解决办法转载于[/size][/font][font=Arial][size=9pt]http://stoned.blogchina.com/stoned/3083045.html[/size][/font][font=宋体][size=9pt],非我本人研究成果。[/size][/font]
[font=宋体][size=9pt]已经搜索到文件,如何用[/size][/font][font=Arial][size=9pt]CListBox[/size][/font][font=宋体][size=9pt]以图标形式显示出来?[/size][/font][font=Arial][size=9pt]
CListCtrl ListCtrl;
CImageList ImageList;
ImageList.Create(IDB_BITMAP, 48, 2, RGB(0,0,0));
ListCtrl.SetImageList(&ImageList, LVSIL_NORMAL);
ListCtrl.InsertItem(iListIndex, strItem, 1);
[/size][/font][font=宋体][size=9pt]如何改变控制面板中电源属性对话框的尺寸[/size][/font][font=Arial][size=9pt]?
1[/size][/font][font=宋体][size=9pt]、需要修改对话框的尺寸是因为对话框是以资源方式加载的,不会根据当前系统显示分辨率而自我调节尺寸。[/size][/font][font=Arial][size=9pt]
2[/size][/font][font=宋体][size=9pt]、安装[/size][/font][font=Arial][size=9pt]WINCE[/size][/font][font=宋体][size=9pt]后有一些组件([/size][/font][font=Arial][size=9pt]feature[/size][/font][font=宋体][size=9pt])的资源文件[/size][/font][font=Arial][size=9pt]*.res[/size][/font][font=宋体][size=9pt]就已经有了,如果你不改变,那么[/size][/font][font=Arial][size=9pt]build[/size][/font][font=宋体][size=9pt]内核的时候[/size][/font][font=Arial][size=9pt]PB[/size][/font][font=宋体][size=9pt]只是把这些[/size][/font][font=Arial][size=9pt].res[/size][/font][font=宋体][size=9pt]复制到工程目录下,然后与[/size][/font][font=Arial][size=9pt]*.obj[/size][/font][font=宋体][size=9pt]合并成[/size][/font][font=Arial][size=9pt]EXE[/size][/font][font=宋体][size=9pt]、[/size][/font][font=Arial][size=9pt]DLL[/size][/font][font=宋体][size=9pt]、[/size][/font][font=Arial][size=9pt]CPL[/size][/font][font=宋体][size=9pt]。所以修改了[/size][/font][font=Arial][size=9pt].rc[/size][/font][font=宋体][size=9pt]文件里面的对话框尺寸后要重新编译[/size][/font][font=Arial][size=9pt].rc[/size][/font][font=宋体][size=9pt]文件为[/size][/font][font=Arial][size=9pt].res[/size][/font][font=宋体][size=9pt]文件,然后再覆盖原来[/size][/font][font=Arial][size=9pt] WINCE[/size][/font][font=宋体][size=9pt]自带的[/size][/font][font=Arial][size=9pt].res[/size][/font][font=宋体][size=9pt]文件。[/size][/font][font=Arial][size=9pt]
3[/size][/font][font=宋体][size=9pt]、改变对话框尺寸有两种办法:一种方法是更改系统字体字号,系统字体的字号变化会影响对话框的尺寸,但是缺点是所有系统字体有关的[/size][/font][font=Arial][size=9pt]UI[/size][/font][font=宋体][size=9pt]都会改变。另一种是在[/size][/font][font=Arial][size=9pt].rc[/size][/font][font=宋体][size=9pt]文件中调整对话框尺寸,然后编译成[/size][/font][font=Arial][size=9pt].res[/size][/font][font=宋体][size=9pt]文件,再将[/size][/font][font=Arial][size=9pt].res[/size][/font][font=宋体][size=9pt]复制到对应的语言目录里,比如目录名为[/size][/font][font=Arial][size=9pt]0804[/size][/font][font=宋体][size=9pt](中文),再执行[/size][/font][font=Arial][size=9pt]Rebuild[/size][/font][font=宋体][size=9pt]命令重新编译内核,或者执行[/size][/font][font=Arial][size=9pt]sysgen[/size][/font][font=宋体][size=9pt]+[/size][/font][font=Arial][size=9pt]build[/size][/font][font=宋体][size=9pt]。在研究中我发现[/size][/font][font=Arial][size=9pt].res[/size][/font][font=宋体][size=9pt]文件虽然能够直接用[/size][/font][font=Arial][size=9pt]EVC[/size][/font][font=宋体][size=9pt]打开、修改、保存,但是和其它[/size][/font][font=Arial][size=9pt]Obj[/size][/font][font=宋体][size=9pt]链接成[/size][/font][font=Arial][size=9pt]EXE[/size][/font][font=宋体][size=9pt]、[/size][/font][font=Arial][size=9pt]DLL[/size][/font][font=宋体][size=9pt]、[/size][/font][font=Arial][size=9pt]CPL[/size][/font][font=宋体][size=9pt]后并不能运行,所以还是建议读者用[/size][/font][font=Arial][size=9pt]CE[/size][/font][font=宋体][size=9pt]自带的[/size][/font][font=Arial][size=9pt]rc[/size][/font][font=宋体][size=9pt]工具编译最好。读者可在[/size][/font][font=Arial][size=9pt]PB[/size][/font][font=宋体][size=9pt]的命令行中键入[/size][/font][font=Arial][size=9pt]“rc /?”[/size][/font][font=宋体][size=9pt]了解[/size][/font][font=Arial][size=9pt]rc.exe[/size][/font][font=宋体][size=9pt]工具的用途和参数。[/size][/font]
[font=宋体][size=9pt]使用[/size][/font][font=Arial][size=9pt]EVC build[/size][/font][font=宋体][size=9pt]之后连接模拟器的时候,提示[/size][/font][font=Arial][size=9pt]download file[/size][/font][font=宋体][size=9pt]等了一会又出现[/size][/font][font=Arial][size=9pt]download failed[/size][/font][font=宋体][size=9pt]?[/size][/font]
[font=宋体][size=9pt]一般这样的问题从下面几个步骤解决:[/size][/font][font=Arial][size=9pt]
1[/size][/font][font=宋体][size=9pt]、如果之前能启动模拟器而现在不能,那么先[/size][/font][font=Arial][size=9pt]clean[/size][/font][font=宋体][size=9pt]然后重启计算机再[/size][/font][font=Arial][size=9pt]build[/size][/font][font=宋体][size=9pt]。[/size][/font][font=Arial][size=9pt]
2[/size][/font][font=宋体][size=9pt]、如果开发的主机为[/size][/font][font=Arial][size=9pt]WINXP+SP2[/size][/font][font=宋体][size=9pt],可能存在与[/size][/font][font=Arial][size=9pt]EVC[/size][/font][font=宋体][size=9pt]模拟器不兼容的情况,检查[/size][/font][font=Arial][size=9pt]C:\boot.ini[/size][/font][font=宋体][size=9pt],将[/size][/font][font=Arial][size=9pt]/noexecute=optin[/size][/font][font=宋体][size=9pt]改为[/size][/font][font=Arial][size=9pt]/execute=optin[/size][/font][font=宋体][size=9pt]。[/size][/font][font=Arial][size=9pt]
3[/size][/font][font=宋体][size=9pt]、检查你的模拟器是否能运行,假设你正用的[/size][/font][font=Arial][size=9pt]SDK[/size][/font][font=宋体][size=9pt]名称为[/size][/font][font=Arial][size=9pt]MYSDK[/size][/font][font=宋体][size=9pt],单击菜单[/size][/font][font=Arial][size=9pt]tools—configure platform manager[/size][/font][font=宋体][size=9pt],选择[/size][/font][font=Arial][size=9pt] MYSDK—MYSDK emulator[/size][/font][font=宋体][size=9pt],再单击[/size][/font][font=Arial][size=9pt]properties—test[/size][/font][font=宋体][size=9pt],看看模拟器是否能够启动,如果能启动那问题就不大。[/size][/font][font=Arial][size=9pt]
4[/size][/font][font=宋体][size=9pt]、单击菜单[/size][/font][font=Arial][size=9pt]build—update remote output files[/size][/font][font=宋体][size=9pt],看看模拟器是否能够启动。[/size][/font][font=Arial][size=9pt]
5[/size][/font][font=宋体][size=9pt]、如果上述办法均不行,关闭[/size][/font][font=Arial][size=9pt]EVC[/size][/font][font=宋体][size=9pt]然后重新建立一个新的工程,编译,看看模拟器是否能够启动,如果能启动说明原来工程出了问题,最好恢复原工程的备份。[/size][/font]
[font=宋体][size=9pt]如何设置能够自动拨号、禁止自动拨号?[/size][/font]
[font=宋体][size=9pt]在[/size][/font][font=Arial][size=9pt][HKEY_LOCAL_MACHINE\Comm\Autodial][/size][/font][font=宋体][size=9pt]下是自动拨号的注册表设置。[/size][/font][font=Arial][size=9pt]
Enabled=DWORD:1 ///[/size][/font][font=宋体][size=9pt]是否能够自动拨号[/size][/font][font=Arial][size=9pt]
FailRetryWaitMS=DWORD ///[/size][/font][font=宋体][size=9pt]如果失败再次拨号的等待时间[/size][/font][font=Arial][size=9pt]
RasEntryName1= REG_SZ ///[/size][/font][font=宋体][size=9pt]自动拨号采用的拨号连接名称[/size][/font]
[font=宋体][size=9pt]更多细节请参考标题为[/size][/font][font=Arial][size=9pt]“Auto Dial Registry Settings”[/size][/font][font=宋体][size=9pt]的帮助文档。[/size][/font]